我有一个 pandas 数据框,如下所示:
player condition num
A 0 1
A 1 2
A 1 3
B 0 1
B 0 2
B 1 3
B 0 4
我想添加一个列来存储 num
列的最小值,其中每个 玩家
条件
列为 1。
因此,结果应如下所示:
player condition num numCondition
A 0 1 2
A 1 2 2
A 1 3 2
B 0 1 3
B 0 2 3
B 1 3 3
B 0 4 3
我知道每个玩家
需要一个groupBy()
。然后,我将需要一个可能使用 lambda()
函数的 apply()
。但我还无法将这些碎片拼凑在一起。
编辑:条件
列是我的示例中的简化。实际上,应该可以使用常用的 pandas 数据帧查询来过滤行。例如。 df[(df.condition == 1) & (df.otherCondition > 10)]
最佳答案
通过使用drop_duplicates
df.player.map(df[df.condition==1].drop_duplicates(['player'],keep='first').set_index('player').num)
Out[221]:
0 2
1 2
2 2
3 3
4 3
5 3
6 3
Name: player, dtype: int64
df['numCondition']=df.player.map(df[df.condition==1].drop_duplicates(['player'],keep='first').set_index('player').num)
df
Out[223]:
player condition num numCondition
0 A 0 1 2
1 A 1 2 2
2 A 1 3 2
3 B 0 1 3
4 B 0 2 3
5 B 1 3 3
6 B 0 4 3
关于python - Pandas 获取每组条件第一次出现的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46624323/