例如,我创建了这个数据框:
import pandas as pd
df = pd.DataFrame({'Cycle': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]})
#Maybe something like this: df['Cycle Type'] = df['Cycle'].rolling(2).apply(lambda x: len(set(x)) != len(x),raw= True).replace({0 : False, 1: True})
我想计算值的数量,然后给它分配一种类型的循环。如果循环少于12行或多于100行,则将其标记为坏,否则将其标记为好。我想使用类似lambda函数的东西来检查前一行的值是否相同,但我不确定如何添加计数功能来为它提供我想要的参数。
4条答案
按热度按时间dgenwo3n1#
首先计算
pandas.DataFrame.groupby
、pandas.DataFrame.transform
和pandas.DataFrame.count
的每组中的行数,如下所示然后使用
pandas.DataFrame.apply
对其应用质量函数:·如果行数小于12且大于100,则将
cycle_quality
定义为bad
·否则,
cycle_quality
应为good
ix0qys7i2#
使用
groupby
、transform
获取每个周期的大小,使用between
查看每个周期的大小是否在13和100之间(包括13和100),并将True标记为良好,False标记为不良。因为根据要求,任何小于12且大于100的大小都是不良的,而在[13,100]之间的所有大小都是良好的。输出:
编辑:
您可以根据需要更改要标记为"良好"或"不良"的间隔。如果您的要求是少于12个应标记为"良好",则在间隔中包括12个,如下所示:
那么您的输出为:
ki1q1bka3#
另一种实现方法是:
pd.Series.value_counts
获取df['Cycle']
中所有唯一值的计数。pd.Series.between
以获得一个布尔值序列。Cycle
的pd.Series.map
之前,我们将该数列转换为具有replace
的'good'|'bad'
。snvhrwxg4#
这是一种使用
pd.cut()
的方法。如果需要应用比好和坏更多的类别,这可能会很有用。或
输出: