PANDAS指望条件

时间:2016-06-13 00:41:06

标签: python pandas

我正在尝试使用' 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

1 个答案:

答案 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

在上方,dfSUBJECT分组,差异取自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