【问题标题】:Pandas: Applying a function to each group independentlyPandas:独立地将函数应用于每个组
【发布时间】:2015-03-13 18:43:36
【问题描述】:

我有以下数据集:

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

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

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

结果应该是这样的:

ID      Duration     SpeedMean    SpeedMedian
1          10           1              1
1          20           0              0
1          30           0              0
2          5            1              1
2          10           1              1
2          15           0              0
2          20           0              0

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

谢谢。

【问题讨论】:

  • 不需要 lambda,虽然我猜你可以。查看 groupby 的文档。这应该是一个相当简单的应用程序。

标签: python pandas lambda


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-07
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 2023-01-10
    • 2018-06-06
    • 2012-07-28
    相关资源
    最近更新 更多