我有一个如下所示的Pandas数据框。
- name: create group-services
debug:
msg: "{{item.1.0.group}}-{{item.0}}-{{item.1.1.name}}"
loop: "{{ range(0, host_list|length) | product(list_services|subelements('services')) | list }}"
第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
列包含一些文本。
我现在想创建2个新列,分别包含值text
和count1
,其中列text
首先包含值count2
。
因此,结果应如下所示:
2
我已经问过一个类似的问题,但是应该在[此处] [1]的唯一位置添加一个新列。
答案是使用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
中的map
。
Series
但是,当我尝试将此方法应用于两列时,它不起作用。
我这样尝试:
s = df[df['count2'] == 2].drop_duplicates(['player']).set_index('player')['count1']
df['new'] = df['player'].map(s)
这会产生以下错误:
TypeError:“ DataFrame”对象不可调用
如何使它正常工作?
答案 0 :(得分:2)
您可以按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