【发布时间】:2018-08-09 21:17:00
【问题描述】:
我正在尝试找到一种方法来优化循环通过 pandas 数据框。该数据集包含约 45 万行和约 20 列。数据框包含 3 个位置变量作为多索引,我想删除组中存在 NaN 列的行,否则用组的平均值填充 NaN。
LOC = ['market_id', 'midmarket_id', 'submarket_id']
# Assign -1000 to multiindex nan values
df = df.fillna({c:-1000 for c in LOC})
df = df.set_index(LOC).sort_index(level=[i for i in range(len(LOC))])
# Looping through subset with same (market, midmarket, submarket)
for k, v in df.copy().groupby(level=[i for i in range(len(LOC))]):
# If there is any column with all NaN value, drop it from df
if v.isnull().all().any():
df.drop(v.index.values)
# If there is at least one non-NaN value, fillna with mean
else:
df.loc[v.index.values] = df.loc[v.index.values].fillna(v.mean())
所以如果有这样的数据框 before 它应该像这样转换,删除所有 NaN 列的行 after.
如果这是多余的或不符合堆栈溢出问题指南,我深表歉意。但如果有人对此有更好的解决方案,我将不胜感激。
提前致谢。
【问题讨论】: