使用熊猫根据自定义条件派生一列

时间:2019-02-13 16:20:48

标签: python pandas

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

输入数据框:

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

1 个答案:

答案 0 :(得分:0)

您可以使用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