我有一個資料框,有兩列District和region。以下是輸入資料框的示例:
district region
1 Aveiro -
2 Aveiro Entre Douro e Minho
3 Aveiro Beira Litoral
4 Aveiro Beira Litoral
5 Aveiro Entre Douro e Minho
6 Aveiro Beira Litoral
7 Braga Trás-os-Montes
8 Braga -
9 Braga Trás-os-Montes
如您所見,資料框中沒有空值。但是在區域列中,有一些記錄具有這個值 "-" 。現在,我想根據帶有列區的 groupby 場景,用最頻繁的值來復制該列中的所有“-”記錄:我們可以用這個來獲得這個計數......
df1['region'].groupby(df1['district']).value_counts()
district region
Aveiro Beira Litoral 3
Entre Douro e Minho 2
- 1
Braga Trás-os-Montes 2
- 1
如您所見,“Beira Litoral”是 Averio 最常用的值,那么它應該替換 region 列中的“-”。同樣,“Trás-os-Montes”是 Braga 最常見的值。
輸出資料框應如下所示:
district region
1 Aveiro Beira Litoral
2 Aveiro Entre Douro e Minho
3 Aveiro Beira Litoral
4 Aveiro Beira Litoral
5 Aveiro Entre Douro e Minho
6 Aveiro Beira Litoral
7 Braga Trás-os-Montes
8 Braga Trás-os-Montes
9 Braga Trás-os-Montes
如果我有Nan而不是“-”,那么我可以用這樣的東西解決這個問題
uj5u.com熱心網友回復:
您可以過濾掉-,然后找到modewith groupby():
modes = (df1['region'].replace('-', np.nan)
.groupby(df1['district'])
.transform(lambda x: x.mode()[0])
)
df1['region'] = np.where(df1['region']=='-', modes, df1['region'])
輸出:
district region
1 Aveiro Beira Litoral
2 Aveiro Entre Douro e Minho
3 Aveiro Beira Litoral
4 Aveiro Beira Litoral
5 Aveiro Entre Douro e Minho
6 Aveiro Beira Litoral
7 Braga Trás-os-Montes
8 Braga Trás-os-Montes
9 Braga Trás-os-Montes
uj5u.com熱心網友回復:
獲取要用于每個組的值,然后用它們替換。
def get_most_freq_region(group):
return group.region.value_counts().index[0]
fill_in_values = tmp.groupby('district').apply(get_most_freq_region)
tmp = tmp.set_index('district')
tmp['fill_in_values'] = fill_in_values
tmp.loc[:, 'region'] = tmp.apply(axis=1, func=lambda x: x.region if x.region != '-' else x.fill_in_values)
回傳值:
region fill_in_values
district
Aveiro Beira Litoral Beira Litoral
Aveiro Entre Douro e Minho Beira Litoral
Aveiro Beira Litoral Beira Litoral
Aveiro Beira Litoral Beira Litoral
Aveiro Entre Douro e Minho Beira Litoral
Aveiro Beira Litoral Beira Litoral
Braga Trás-os-Montes Trás-os-Montes
Braga Trás-os-Montes Trás-os-Montes
Braga Trás-os-Montes Trás-os-Montes
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412459.html
標籤:
上一篇:如何使用R將ID分成不同的行
