Python 熊猫使用地图向数据帧添加多列



我有一个Pandas数据帧,如下所示。

player  count1  count2  text
A       1       1       X   
A       2       1       Y   
A       3       1       Z   
A       4       2       D   
A       5       2       E   
B       1       1       F   
B       2       2       G   
B       3       2       H   
B       4       2       J   

player包含名称,count1是累积总和,列count2包含其他计数,列text包含一些文本。

我现在想创建 2 个新列,其中包含count1的值,text其中列count2首先包含值2

因此,结果应如下所示:

player  count1  count2  text    new new2
A       1       1       X       4   D
A       2       1       Y       4   D
A       3       1       Z       4   D
A       4       2       D       4   D
A       5       2       E       4   D
B       1       1       F       2   G
B       2       2       G       2   G
B       3       2       H       2   G
B       4       2       J       2   G

我已经问过一个类似的问题,但是只有在哪里,应该添加一个新列[这里][1]。

答案是使用mapbySeries.

s = df[df['count2'] == 2].drop_duplicates(['player']).set_index('player')['count1']
df['new'] = df['player'].map(s)

但是,当我尝试将此方法应用于两列时,它不起作用。

我这样尝试:

s = df[df['count2'] == 2].drop_duplicates(['player']).set_index('player')[['count1', 'text']]
df[['new', 'new2']] = df['player'].map(s)

这将产生以下错误:

类型错误:"数据帧"对象不可调用

我怎样才能让它工作?

您可以按 count2 == 2 进行过滤,按播放器删除重复项,然后将结果合并回播放器上的原始 DF,例如:

new = df.merge(
df.loc[df.count2 == 2, ['player', 'count1', 'text']]
.drop_duplicates(subset=['player']), 
on='player'
)

这为您提供:

player  count1_x  count2 text_x  count1_y text_y
0      A         1       1      X         4      D
1      A         2       1      Y         4      D
2      A         3       1      Z         4      D
3      A         4       2      D         4      D
4      A         5       2      E         4      D
5      B         1       1      F         2      G
6      B         2       2      G         2      G
7      B         3       2      H         2      G
8      B         4       2      J         2      G

最新更新