python - 从另一个数据帧添加到数据帧字符串值中的列
问题描述
我有以下数据框,并希望将 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
解决方案
使用 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
推荐阅读
- javascript - 流:日期与字符串不兼容
- android - 从 RecyclerView 中删除项目并将其插入到另一个位置
- ios - 如何声明自定义对象,例如。可编码类中的计时器
- reactjs - 带有用于用户输入的自定义输入的 react-datepicker 不起作用
- google-colaboratory - 自 6 月 14 日以来,Keras 模型在 TPU 上运行不佳
- php - 如何从php中的数组对象中获取值
- c++ - 试图与滨松显微光谱仪通信
- azure - Azure IoT 中心问题:所有设备不断脱机
- django - 如何通过 Vue JS 调用 REST API 服务
- jquery - jQuery if statment on click event 在 Chrome 中不起作用但在 firefox 浏览器中起作用