[英]Pandas fillna by mean of each Group
我有一個 pandas dataframe 有幾個列。 我想用fillna's
平均值填充 select 列。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'cat': ['A','A','A','B','B','B','C','C'],
'v1': [10, 12, np.nan, 10, 14, np.nan, 11, np.nan],
'v2': [12, 8, np.nan, np.nan, 6, 12, 10, np.nan]
})
我正在尋找一種可擴展的解決方案,這意味着我可以應用在多個列上執行操作。
np.nan
的將填充每組的mean
。
預計 output:
cat v1 v2
A 10 12
A 12 8
A 11 10
B 10 9
B 14 6
B 12 12
C 11 10
C 11 10
其他類似的問題僅限於單個列,我正在尋找一種可推廣的解決方案,並且可以為多個列輸入缺失的NA
。
這將用列的平均值替換所有 np.nan
import pandas as pd
import numpy as np
df = pd.DataFrame({
'cat': ['A','A','A','B','B','B','C','C'],
'v1': [10, 12, np.nan, 10, 14, np.nan, 11, np.nan],
'v2': [12, 8, np.nan, np.nan, 6, 12, 10, np.nan]
})
for x in df.columns.drop('cat'):
mean_of_column = df[x].mean()
df[x].fillna(mean_of_column, inplace = True)
df
請注意,這將使該列成為浮點數,因為它們的意思不是整潔的整數。 但是,如果您願意,可以繼續使用它來刪除小數點。
嘗試這個:
df = df.fillna(df.groupby('cat').transform('mean'))
Output:
cat v1 v2
0 A 10.0 12.0
1 A 12.0 8.0
2 A 11.0 10.0
3 B 10.0 9.0
4 B 14.0 6.0
5 B 12.0 12.0
6 C 11.0 10.0
7 C 11.0 10.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.