我有一个 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/

10-12 20:36