簡體   English   中英

如何合並(連接)pandas 中每列具有不同值的兩行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM