如何使用组的最小值在同一列中填充 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/