熊猫:独立地将功能应用于每个组

时间:2015-03-13 18:43:37

标签: python pandas lambda

我有以下数据集:

ID      Duration
1          10         
1          20         
1          30
2          5
2          10
2          15
2          20         

我想添加两列,其中第一列是SpeedMean,如果第i行中的1小于给定{的平均持续时间,则它等于Duration {1}},否则为0。

对于第二列ID,如果第i行中的SpeedMedian小于给定Duration的中位数持续时间,我希望它等于1,否则为0。

结果应如下所示:

ID

我知道我应该使用lambda x,但我是熊猫新手,非常感谢你的帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以在groupbytransformation

上阅读

http://pandas.pydata.org/pandas-docs/dev/groupby.html#transformation

In [267]: df['SpeedMean'] = df.groupby('ID')['Duration'].transform(lambda s: s < s.median()).astype(int)

In [268]: df['SpeedMean'] = df.groupby('ID')['Duration'].transform(lambda s: s < s.mean()).astype(int)

In [269]: df['SpeedMedian'] = df.groupby('ID')['Duration'].transform(lambda s: s < s.median()).astype(int)

In [270]: df
Out[270]: 
   ID  Duration  SpeedMean  SpeedMedian
0   1        10          1            1
1   1        20          0            0
2   1        30          0            0
3   2         5          1            1
4   2        10          1            1
5   2        15          0            0
6   2        20          0            0