【发布时间】:2020-10-23 18:54:22
【问题描述】:
我有一个非常复杂的问题,即如何为每个组添加一个包含条件的新列。这是示例数据框,
df = pd.DataFrame({
'id': ['AA', 'AA', 'AA', 'AA', 'BB', 'BB', 'BB', 'BB', 'BB',
'CC', 'CC', 'CC', 'CC', 'CC', 'CC', 'CC'],
'From_num': [80, 68, 751, 'Issued', 32, 68, 126, 'Issued', 'Missed', 105, 68, 114, 76, 68, 99, 'Missed'],
'To_num':[99, 80, 68, 751, 105, 32, 68, 126, 49, 324, 105, 68, 114, 76, 68, 99],
})
id From_num To_num
0 AA 80 99
1 AA 68 80
2 AA 751 68
3 AA Issued 751
4 BB 32 105
5 BB 68 32
6 BB 126 68
7 BB Issued 126
8 BB Missed 49
9 CC 105 324
10 CC 68 105
11 CC 114 68
12 CC 76 114
13 CC 68 76
14 CC 99 68
15 CC Missed 99
我有一个 'flag' 编号 68。在每个组中,对于 'From_num' 列中等于或高于此标志号的任何行将在新列中标记为“Forward”,任何行等于或低于标志号“To_num”列将在同一列中标记为“Back”。然而,最困难的情况是:如果这个标志号在每一列中出现多次,'From_num' 和 'To_num' 之间的行将在新列中标记为“Forward&Back”,请参见下面的 df 和预期结果。
Expected result
id From_num To_num Direction
0 AA 80 99 Forward
1 AA 68 80 Forward
2 AA 751 68 Back
3 AA Issued 751 Back
4 BB 32 105 Forward
5 BB 68 32 Forward
6 BB 126 68 Back
7 BB Issued 126 Back
8 BB Missed 49 Back
9 CC 105 324 Forward
10 CC 68 105 Forward
11 CC 114 68 Forward&Back # From line 11 to 13, flag # 68 appears more than once
12 CC 76 114 Forward&Back # so the line 11, 12 and 13 labelled "Forward&Back"
13 CC 68 76 Forward&Back
14 CC 99 68 Back
15 CC Missed 99 Back
我尝试编写了许多循环,但它们都失败了,无法获得预期的结果。因此,如果有人有想法,请提供帮助。希望问题很清楚。非常感谢!
【问题讨论】:
标签: python pandas loops dataframe group-by