gpt4 book ai didi

python - Fillna 如果出现频率最高,则 fillna 为整个列中出现频率最高的值

转载 作者:行者123 更新时间:2023-11-28 17:13:40 27 4
gpt4 key购买 nike

我有一个 Pandas 数据框

        City    State
0 Cambridge MA
1 NaN DC
2 Boston MA
3 Washignton DC
4 NaN MA
5 Tampa FL
6 Danvers MA
7 Miami FL
8 Cambridge MA
9 Miami FL
10 NaN FL
11 Washington DC

如果状态出现在之前,我想根据最频繁的状态填充 NaN,所以我按状态分组并应用以下代码:

df['City'] = df.groupby('State').transform(lambda x:x.fillna(x.value_counts().idxmax()))

如果在输出之前所有状态都已发生,则以上代码适用

          City State
0 Cambridge MA
1 Washignton DC
2 Boston MA
3 Washignton DC
4 Cambridge MA
5 Tampa FL
6 Danvers MA
7 Miami FL
8 Cambridge MA
9 Miami FL
10 Miami FL
11 Washington DC

但是我想添加一个条件,这样如果一个州从未出现过,那么它的城市将是整个城市列中最常见的,即如果数据框是

          City State
0 Cambridge MA
1 NaN DC
2 Boston MA
3 Washignton DC
4 NaN MA
5 Tampa FL
6 Danvers MA
7 Miami FL
8 Cambridge MA
9 Miami FL
10 NaN FL
11 Washington DC
12 NaN NY

在我想要输出之前,NY 从未发生过

          City State
0 Cambridge MA
1 Washignton DC
2 Boston MA
3 Washignton DC
4 Cambridge MA
5 Tampa FL
6 Danvers MA
7 Miami FL
8 Cambridge MA
9 Miami FL
10 Miami FL
11 Washington DC
12 Cambridge NY

上面的代码给出了一个 ValueError: ('attempt to get argmax of an empty sequence') 因为“NY”以前从未出现过。

最佳答案

IIUC:

def f(x):
if x.count()<=0:
return np.nan
return x.value_counts().index[0]

df['City'] = df.groupby('State')['City'].transform(f)

df['City'] = df['City'].fillna(df['City'].value_counts().idxmax())

输出:

          City State
0 Cambridge MA
1 Washignton DC
2 Cambridge MA
3 Washignton DC
4 Cambridge MA
5 Miami FL
6 Cambridge MA
7 Miami FL
8 Cambridge MA
9 Miami FL
10 Miami FL
11 Washignton DC
12 Cambridge NY

关于python - Fillna 如果出现频率最高,则 fillna 为整个列中出现频率最高的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45627047/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com