【发布时间】:2018-04-03 04:08:31
【问题描述】:
A B C D
0 01:00:00 2002-01-16 10 3
1 01:30:00 2002-01-16 10 -12
2 02:00:00 2002-01-16 10 7
3 01:00:00 2002-01-17 20 33
4 01:30:00 2002-01-17 20 -27
5 02:00:00 2002-01-17 20 12
results = {}
我想为每个 A 组选择一行,取满足以下条件之一的 first 行:
- D >= C*(0.5)
- D
- 否则,取最后一行。
输出应该是:
A B C D
1 01:30:00 2002-01-16 10 -12
3 01:00:00 2002-01-17 20 33
我试过了:
grouped = df.groupby('B')
for name, group in grouped:
if (group["D"] >= group["C"]*(0.5)).any():
results[name] = group[group["D"] >= group["C"]*(0.5)].head(1)
elif (group["D"] <= group["C"]*(-1)).any():
results[name] = group[group["D"] <= group["C"]*(-1)].head(1)
else:
results[name] = group.tail(1)
【问题讨论】:
-
您提供的示例有什么问题?
-
不选择满足以下条件之一的第一行
-
您是按您所说的
A分组,还是按您想要的输出中的B分组?
标签: python pandas conditional