首页 > 解决方案 > 使用 pandas 根据自定义条件派生列

问题描述

我正在尝试转换熊猫数据框,如下所示。想基于“Turn”列导出另一列,即基于用户 id,例如,用户 id 1,从 61 开始,它应该变为 1,后跟 2 和 3 等特定使用的 id。想法是,将转弯从 1 变平,而不是每个 id 的实际转弯数。请参阅下面显示的预期数据框。

输入数据框:

id  country Turn
1   USA 61
1   USA 62
1   USA 62
1   UK  63
2   USA 23
2   India   24
2   India   24
2   India   25
3   India   11
3   India   12

预期输出:

id  country Turn    actual_turn
1   USA 61  1
1   USA 62  2
1   USA 62  2
1   UK  63  3
2   USA 23  1
2   India   24  2
2   India   24  2
2   India   25  3
3   India   11  1
3   India   12  2

标签: pythonpandas

解决方案


您可以使用groupby + cumsum

df['actual_turn'] = df.groupby('id').Turn.transform(lambda x: (x != x.shift()).cumsum())
print(df)

输出

   id country  Turn  actual_turn
0   1     USA    61            1
1   1     USA    62            2
2   1     USA    62            2
3   1      UK    63            3
4   2     USA    23            1
5   2   India    24            2
6   2   India    24            2
7   2   India    25            3
8   3   India    11            1
9   3   India    12            2

推荐阅读