首页 > 解决方案 > 从另一个数据帧添加到数据帧字符串值中的列

问题描述

我有以下数据框,并希望将 df 中的分数列到 df1 中的列摘要中。当两个数据框中的年份和名称相同时,我无法在同一字段中添加 2 个值(在这种情况下,我想在 name ="juli" 和 year = "2010" 得分时添加到 df1 的行摘要栏中的“25,54”:代码如下:

import pandas as pd

lst = [['juli', 25,2010], ['krish', 30,2020],
       ['nick', 26, 2021], ['juli', 22,2020],['juli', 54,2010]]
    
df = pd.DataFrame(lst, columns =['Name', 'score',"year"])
lst1 = [['juli', 2,2010], ['krish', 1,2020],
       ['nick', 1,2021], ['juli', 1,2020] ]
    
df1 = pd.DataFrame(lst1, columns =['Name', 'm_count',"year"])

df1.insert(3,"summary",0)

for i in range(len(df1)):
        for j in range(len(df)):
            if df1["m_count"].values[i]==1:
                if df1["Name"].values[i] == df["Name"].values[j] and df1["year"].values[i] == df["year"].values[j]:
                    df1["summary"].values[i]= df["score"].values[j]
            else:
                ...

print(df1)

当前结果是:

    Name  m_count  year  summary
0   juli        2  2010        0
1  krish        1  2020       30
2   nick        1  2021       26
3   juli        1  2020       22

需要的结果:

    Name  m_count  year  summary
0   juli        2  2010       25,54
1  krish        1  2020       30
2   nick        1  2021       26
3   juli        1  2020       22

标签: pythonpandasdataframe

解决方案


使用 agroupby来汇总每个 的分数['Name', 'year'],在这种情况下,只需将它们连接起来即可获得所需的输出。然后将结果合并回另一个 DataFrame。那一列 0 是必要的,并且对于合并有问题,所以我放弃了它。

s = (df['score'].astype(str)
       .groupby([df['Name'], df['year']])
       .agg(','.join)
       .rename('summary'))

df1 = df1.drop(columns='summary').merge(s, on=['Name', 'year'], how='left')

    Name  m_count  year summary
0   juli        2  2010   25,54
1  krish        1  2020      30
2   nick        1  2021      26
3   juli        1  2020      22

推荐阅读