Python 获取每个组第一次出现的条件的列值
我有一个熊猫数据框,如下所示:Python 获取每个组第一次出现的条件的列值,python,pandas,lambda,group-by,apply,Python,Pandas,Lambda,Group By,Apply,我有一个熊猫数据框,如下所示: 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列的最小值,其中每player的条件列为1 因此,结果应如下所示: player
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
列的最小值,其中每player
的条件
列为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()
perplayer
。然后我需要一个apply()
,可能需要使用lambda()
函数。但我还不能把这些碎片拼在一起
编辑:在我的示例中,
条件
列是一种简化。实际上,应该可以使用通常的数据帧查询来过滤行。例如,df[(df.condition==1)和(df.otherCondition>10)]
首先聚合,然后在播放器上加入df
:
df.join(
df.groupby('player')
.apply(lambda g: g.num[g.condition == 1].min())
.rename('numCondition'),
on='player')
# 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
首先聚合,然后在player
上使用df
加入:
df.join(
df.groupby('player')
.apply(lambda g: g.num[g.condition == 1].min())
.rename('numCondition'),
on='player')
# 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
通过使用删除重复项
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
通过使用删除重复项
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
如果某一组从未满足该条件,会发生什么?也就是说,在一组中从来没有值1
?它为该玩家提供所有NaN
s。numCondition
列中的NaN
s?如果是,更换NaN
s的最快方法是什么?是。这就是它在版本'0.20.3'
上的行为。您想用什么替换它?您应该能够使用fillna(0)
来执行此操作,如果要将NaN
s替换为零。如果一个组从未满足此条件,会发生什么情况?也就是说,在一组中从来没有值1
?它为该玩家提供所有NaN
s。numCondition
列中的NaN
s?如果是,更换NaN
s的最快方法是什么?是。这就是它在版本'0.20.3'
上的行为。您想用什么替换它?如果您想用zero.thx替换NaN
s,您应该可以使用fillna(0)
say来执行此操作!如果某一组从未满足该条件,会发生什么?也就是说,一个组中从来没有值1?@beta将是NaN替换NaN,可以通过replace
或fillna
thx!如果某一组从未满足该条件,会发生什么?也就是说,一个组中从来没有值1?@beta将是NaN替换NaN,可以通过replace
或fillna