我有一个 Pandas 数据框,如下所示。
player count1 count2
A 1 1
A 2 1
A 3 1
A 4 2
A 5 2
B 1 1
B 2 2
B 3 2
B 4 2
player
列包含名称,count1
是累积和,count2
列包含其他计数。我现在想创建一个包含
count1
值的新列,其中 count2
列首先包含值 2
。因此,结果应如下所示:
player count1 count2 new
A 1 1 4
A 2 1 4
A 3 1 4
A 4 2 4
A 5 2 4
B 1 1 2
B 2 2 2
B 3 2 2
B 4 2 2
我试图用
transform
来做,但我不知道如何将它与基于 count2
列的条件(以及 count1
列的值)结合起来。没有
groupby
它的工作方式是这样的,但我不知道在哪里以及如何添加 groupby
:df['new'] = df.loc[matches['count2'] == 2, 'count1'].min()
最佳答案
通过 map
使用 Series
:
s = df[df['count2'] == 2].drop_duplicates(['player']).set_index('player')['count1']
df['new'] = df['player'].map(s)
print (df)
player count1 count2 new
0 A 1 1 4
1 A 2 1 4
2 A 3 1 4
3 A 4 2 4
4 A 5 2 4
5 B 1 1 2
6 B 2 2 2
7 B 3 2 2
8 B 4 2 2
详细信息 :
首先通过
2
仅过滤 boolean indexing
行:print (df[df['count2'] == 2])
player count1 count2
3 A 4 2
4 A 5 2
6 B 2 2
7 B 3 2
8 B 4 2
然后通过
player
通过 drop_duplicates
列删除欺骗:print (df[df['count2'] == 2].drop_duplicates(['player']))
player count1 count2
3 A 4 2
6 B 2 2
关于Python Pandas 具有分组依据和条件的新数据框列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51580657/