我有這個大資料框,下圖是為了簡單起見。
pd.DataFrame(df.groupby(['Pclass', 'Sex'])['Age'].median())
分組結果:

它有需要估算的資料
缺失資料:

如何根據分組統計資料的中位數估算這些值
我想要的結果是:

# You can use this for reference
import numpy as np
import pandas as pd
mldx_arrays = [np.array([1, 1,
2, 2,
3, 3]),
np.array(['male', 'female',
'male', 'female',
'male', 'female'])]
multiindex_df = pd.DataFrame(
[34,29,24,40,18,25], index=mldx_arrays,
columns=['Age'])
multiindex_df.index.names = ['PClass', 'Sex']
multiindex_df
d = {'PClass': [1, 1, 2, 2, 3, 3],
'Sex': ['male', 'female', 'male', 'female', 'male', 'female'],
'Age': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]}
df = pd.DataFrame(data=d)
uj5u.com熱心網友回復:
如果缺少所有值,請洗掉Age列并使用DataFrame.join:
df = df.drop('Age', axis=1).join(multiindex_df, on=['PClass','Sex'])
print (df)
PClass Sex Age
0 1 male 34
1 1 female 29
2 2 male 24
3 2 female 40
4 3 male 18
5 3 female 25
如果需要僅DataFrame.join替換缺失值,請使用并替換原始列中的缺失值:
df = df.join(multiindex_df, on=['PClass','Sex'], rsuffix='_')
df['Age'] = df['Age'].fillna(df.pop('Age_'))
print (df)
PClass Sex Age
0 1 male 34.0
1 1 female 29.0
2 2 male 24.0
3 2 female 40.0
4 3 male 18.0
5 3 female 25.0
如果需要用每組的中位數替換缺失值,請使用GroupBy.transform:
df['Age'] = df['Age'].fillna(df.groupby(['PClass', 'Sex'])['Age'].transform('median'))
uj5u.com熱心網友回復:
鑒于您的示例案例,您可以簡單地將 Series 分配給資料框并重新定義列:
df['Age'] = base_df.groupby(['Pclass', 'Sex'])['Age'].median()
否則你需要小心定位,如果它沒有排序,你可能想使用sort_index()或sort_values()首先,視情況而定。
uj5u.com熱心網友回復:
填充NaN有什么特殊原因嗎?如果沒有,請使用reset_index您的結果:
df = pd.read_csv('your_file_name.csv') # input your file name or url
df.groupby(['Pclass', 'Sex'])['Age'].median().reset_index()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530658.html
下一篇:For回圈賦值
