Python pandas 使用 map 将多列添加到数据框

标签 python pandas dataframe

我有一个如下所示的 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 个新列,其中包含 count1text 的值,其中列 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] 添加一个新列。

答案是按Series 使用map

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)

这会产生以下错误:

TypeError: 'DataFrame' object is not callable

我怎样才能让它工作?

最佳答案

您可以过滤 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

关于Python pandas 使用 map 将多列添加到数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51580878/

相关文章:

python - 在 pandas 中使用 bool 过滤器标量广播 groupby

dataframe - 迭代 Dataframe 以添加一个

Python Pandas DataFrame - 创建更改列

python - RabbitMQ:Pika 连接因对等错误而重置

python - 当我在 tkinter 中删除文本框时,总是留下一个空行

python - 在 pandas.DataFrame.str.replace 中组合多个正则表达式?

python - 如何连接两个 pandas 数据框中具有不同索引和非唯一键的列

python - matplotlib 和 anaconda 问题

python - Python 对于大型应用程序是否足够好?

python - 如何在 pandas df 中设置新索引和删除默认索引