[英]Add to a column in dataframe string value from another dataframe
我有以下數據框,並希望將 df 中的列分數列在 df1 中的列摘要中。 當兩個數據框中的年份和名稱相等時,我無法在同一個字段中添加 2 個值(在這種情況下,我想在名稱 ="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
使用groupby
來匯總每個['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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.