gpt4 book ai didi

python - 如何在同一列中用组的最小值填充 NaN 值

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:01 24 4
gpt4 key购买 nike

如何使用组的最小值在同一列中填充 NaN 值 - 请参见下面的 df 和 df2。对于“A”列中的类别“2”,我想要 min(20, 15)...请帮忙:)

import pandas as pd  
import numpy as np


df = pd.DataFrame({"A": [1,1,2,2,2,3,3,3,3,4,4],
"B": [ np.nan , 10, np.nan, 20, 15, np.nan,np.nan,np.nan,np.nan,40, np.nan]})

In[1]: df
Out[1]:
A B
0 1 NaN
1 1 10.0
2 2 NaN
3 2 20.0
4 2 15.0
5 3 NaN
6 3 NaN
7 3 NaN
8 3 NaN
9 4 40.0
10 4 NaN

如何在没有循环的情况下获得 df2 - ?

df2 = pd.DataFrame({"A": [1,1,2,2,2,3,3,3,3,4,4], 
"B": [ 10 , 10, 15, 15, 15, np.nan,np.nan,np.nan,np.nan,40, 40]})

In[1]: df2
Out[18]:
A B
0 1 10.0
1 1 10.0
2 2 15.0
3 2 15.0
4 2 15.0
5 3 NaN
6 3 NaN
7 3 NaN
8 3 NaN
9 4 40.0
10 4 40.0

最佳答案

如果想用 min 替换每组的所有值,请使用 GroupBy.transform :

df['B'] = df.groupby('A')['B'].transform('min')
print (df)
A B
0 1 10.0
1 1 10.0
2 2 15.0
3 2 15.0
4 2 15.0
5 3 NaN
6 3 NaN
7 3 NaN
8 3 NaN
9 4 40.0
10 4 40.0

如果只想将 NaN 替换为 min,请添加 fillna或使用自定义 lambda 函数:

df['B'] = df.B.fillna(df.groupby('A')['B'].transform('min'))

备选方案:

df['B'] = df.groupby('A')['B'].transform(lambda x: x.fillna(x.min()))

print (df)
A B
0 1 10.0
1 1 10.0
2 2 15.0
3 2 20.0
4 2 15.0
5 3 NaN
6 3 NaN
7 3 NaN
8 3 NaN
9 4 40.0
10 4 40.0

关于python - 如何在同一列中用组的最小值填充 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48879913/

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