Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用map向dataframe添加多个列_Python_Pandas_Dataframe - Fatal编程技术网

Python使用map向dataframe添加多个列

Python使用map向dataframe添加多个列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框,如下所示 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

我有一个熊猫数据框,如下所示

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
包含一些文本

现在我想创建两个新列,其中包含
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
s = df[df['count2'] == 2].drop_duplicates(['player']).set_index('player')[['count1', 'text']]
df[['new', 'new2']] = df['player'].map(s)
我已经问了一个类似的问题,但只在此处添加一个新专栏[此处][1]

答案是使用
map
by
Series

s = df[df['count2'] == 2].drop_duplicates(['player']).set_index('player')['count1']
df['new'] = df['player'].map(s)
但是,当我尝试将此方法应用于两个列时,它不起作用

我试着这样做:

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
s = df[df['count2'] == 2].drop_duplicates(['player']).set_index('player')[['count1', 'text']]
df[['new', 'new2']] = df['player'].map(s)
这会产生以下错误:

TypeError:“DataFrame”对象不可调用


我如何才能让它工作?

您可以在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

请注意,指向其他问题的链接已断开。