Python Pandas使用地图将多个列添加到数据框

时间:2018-07-29 13:39:43

标签: python pandas dataframe

我有一个如下所示的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个新列,分别包含值textcount1,其中列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”对象不可调用

如何使它正常工作?

1 个答案:

答案 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