我有一个序列和包含14列的数据框,如果数据框具有Nan值,则需要用序列值替换该数据框值。 (逐行)
average= ref_series.iloc[:,len_of_ref_series[0]-wks:len_of_ref_series[0]].mean(axis=1)
ref_series = ref_series.fillna(average, axis='index')
print(ref_series)
平均值是一个序列:
0 360.000000
1 400.000000
2 386.666667
ref_series是一个数据框:
W01 W02 W03 W04 W05 W06 W07 W08 W09 W10 W11 W12 W13 QTR
0 120 240 360 480 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 120 240 360 600 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 110 220 500 440 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
我的预期结果:
W01 W02 W03 W04 W05 W06 W07 W08 W09 W10 W11 W12 W13 QTR
0 120 240 360 480 360 360 360 360 360 360 360 360 360 360
1 120 240 360 600 400 400 400 400 400 400 400 400 400 400
2 110 220 500 440 386 386 386 386 386 386 386 386 386 386
答案 0 :(得分:1)
执行isna
检查,以确定哪些列在每行中都具有NaN。
df.columns[df.isna().all(axis=0)]
# Index(['W05', 'W06', 'W07', 'W08', 'W09',
# 'W10', 'W11', 'W12', 'W13', 'QTR'], dtype='object')
您可以使用此结果,使用df.assign
将均值分配给那些列:
df = df.assign(**dict.fromkeys(df.columns[df.isna().all(axis=0)], s))
或者,作为整数列,
df.assign(**dict.fromkeys(df.columns[df.isna().all(axis=0)], s.astype(int)))
W01 W02 W03 W04 W05 W06 W07 W08 W09 W10 W11 W12 W13 QTR
0 120 240 360 480 360 360 360 360 360 360 360 360 360 360
1 120 240 360 600 400 400 400 400 400 400 400 400 400 400
2 110 220 500 440 386 386 386 386 386 386 386 386 386 386