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
bySeries
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
请注意,指向其他问题的链接已断开。