我正在尝试使用' groupby'来制表条件的变化。但我很难过,并会感激任何指导。我有一个数据框如下:
SUBJECT TYPE
1 1
1 2
1 2
2 1
2 1
3 1
3 3
3 5
我想生成一个声明,列出任何积极的变化,忽略任何负面变化,并生成每个主题的变化计数。例如,上面的输出将是:
Subject TYPE
1 1
2 0
3 2
我是否需要使用pandas创建一个if / else子句,还是有更简单的方法来实现这个使用峰值?也许像是......
def tabchange(type, subject):
current_subject = subject[0]
type_diff = type - type
j = 1
for i in range(1,len(type)):
type_diff[i] = type[i] - type[i-j]
if subject[i] == current_subject:
if type_diff[i] > 0:
new_row = 1
j += 1
else:
j = 1
else:
new_row[i] = 0
current_subject = subject[i]
return new_row
答案 0 :(得分:1)
import pandas as pd
df = pd.DataFrame({'SUBJECT': [1, 1, 1, 2, 2, 3, 3, 3],
'TYPE': [1, 2, 2, 1, 1, 1, 3, 5]})
grouped = df.groupby('SUBJECT')
df['TYPE'] = grouped['TYPE'].diff() > 0
result = grouped['TYPE'].agg('sum')
产量
SUBJECT
1 1.0
2 0.0
3 2.0
Name: TYPE, dtype: float64
在上方,df
按SUBJECT
分组,差异取自TYPE
列:
In [253]: grouped = df.groupby('SUBJECT'); df['TYPE'] = grouped['TYPE'].diff() > 0
In [254]: df
Out[254]:
SUBJECT TYPE
0 1 False
1 1 True
2 1 False
3 2 False
4 2 False
5 3 False
6 3 True
7 3 True
然后,再次按SUBJECT
进行分组,结果是通过计算True
列中TYPE
列的数量获得的:
In [255]: result = grouped['TYPE'].agg('sum'); result
Out[255]:
SUBJECT
1 1.0
2 0.0
3 2.0
Name: TYPE, dtype: float64