Python/Pandas:仅当两个数据帧中第一列的值相等时,如何按行将数据从一个数据帧添加到另一个数据帧?

问题描述 投票:0回答:1

我有 2 个数据框。对于 dataframe2 中的每一行,我想查看 dataframe1 是否已经在“名称”列中具有相同值的行。如果是这样,我想将 dataframe2 中的行中的数据添加到 dataframe 1 中的相应行。“name”列中的值不应添加。史蒂夫不应该被复制,鲍勃不应该添加新数据。


df1 = pd.DataFrame([{'name': 'Ben', 'goals': 1, 'minutes': 90},
                    {'name': 'Bob', 'goals': 1, 'minutes': 64},
                    {'name': 'Kevin', 'goals': 1, 'minutes': 90}])

df2 = pd.DataFrame([{'name': 'Ben', 'goals': 1, 'minutes': 88},
                    {'name': 'Kevin', 'goals': 1, 'minutes': 3},
                    {'name': 'Steve', 'goals': 1, 'minutes': 13}])

最终输出应该是:

名字 目标 分钟
2 178
鲍勃 1 64
凯文 2 93

这是我尝试过的

for index, row in df1.iterrows():
    if df2.isin([row['name']]).any().any():
        position = int(df2[df2['name'] == str(row['name'])].index.values)
        df1.iloc[index, 1:] = df1.iloc[index, 1:] + df2.iloc[position, 1:]

谢谢

python pandas dataframe data-science
1个回答
0
投票
  1. 将 df1 与 df2 连接,减去名称不在 df1 中的行;
  2. 按名称分组;
  3. 将每组中的值相加
df = pd.concat([df1, df2.loc[df2["name"].isin(df1["name"])]]).groupby("name").sum()

结果:

       goals  minutes
name                 
Ben        2      178
Bob        1       64
Kevin      2       93
© www.soinside.com 2019 - 2024. All rights reserved.