我有以下数据集:
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,但我是熊猫新手,非常感谢你的帮助。
感谢。
答案 0 :(得分:1)
您可以在groupby
和transformation
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