[英]How to merge(join) two rows in pandas with different values in each column?
我正在嘗試根據“國家/地區”的名稱將四行合並為兩行。 dataframe 如下(抱歉格式不好,如果有更好的顯示方式請告訴我):
(Index),Country,SPI_Score,WHR_Score
...............................
190,Congo Republic of,48.45, NaN
191,Congo Democratic Republic of,42.25, NaN
................................
198,Congo (Brazzaville), NaN ,5.194
199,Congo (Kinshasa), NaN ,4.311
我的問題是,當我進行外部連接時,這些國家/地區的名稱不同。 我嘗試像這樣替換國家名稱:
for i in range(len(df['Country'])):
if df.iloc[i]['Country'] in ['Congo Republic of', 'Congo (Brazzaville)']:
df.iloc[i]['Country'] = 'Republic of the Congo'
elif df[i]['Country'] in ['Congo Democratic Republic of', 'Congo (Kinshasa)']:
df.iloc[i]['Country'] = 'Democratic Republic of the Congo'
else:
continue
但是,這不起作用,並給了我原始的 df。 我想要的 output 是:
(Index),Country,SPI_Score,WHR_Score
...............................
190,Republic of the Congo,48.45, 5.194
191,Democratic Republic of the Congo,42.25, 4.311
您可以將您的名稱映射放入字典並將map
新名稱。 放
name_mapper = {'Congo Republic of':'Republic of the Congo',
'Congo (Brazzaville)':'Republic of the Congo',
'Congo Democratic Republic of' : 'Democratic Republic of the Congo',
'Congo (Kinshasa)': 'Democratic Republic of the Congo'
}
map 列的最簡單方法是使用類似
df['Country'].map(name_mapper)
但是如果這個字典的鍵上的'Country'
沒有匹配,那將返回 NaN。 所以下面是一個更強大的版本
df['C'] = df['Country'].apply(lambda v:name_mapper.get(v,v))
現在我們可以在'C'
上分組
df.groupby('C').sum()
獲得
C SPI_Score WHR_Score
0 Democratic Republic of the Congo 42.25 4.311
1 Republic of the Congo 48.45 5.194
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.