我有一个包含 LONG 列列表的数据框,其中一些列可能并不总是存在,具体取决于数据源、一天中的时间等。我需要用 min/max/avg、pct 和一些计数来聚合这些数据,但是每当我对缺少列的数据框执行此操作时,整个聚合函数都会失败并出现错误。有没有办法雄辩地处理丢失的列,如果它是一个丢失的列,则忽略错误,或者通过创建任何内联不存在的列?
df_aggs = df.groupby(['DeviceUUID', 'year', 'month', 'day', 'hour']).agg(
DeviceName=('DeviceName', 'first'),
DeviceType=('DeviceType', 'first'),
V_LD_SEC_A_min=('V_LD_SEC_A', np.min),
V_LD_SEC_A_avg=('V_LD_SEC_A', np.mean),
V_LD_SEC_A_max=('V_LD_SEC_A', np.max),
V_LD_SEC_B_min=('V_LD_SEC_B', np.min),
V_LD_SEC_B_avg=('V_LD_SEC_B', np.mean),
V_LD_SEC_B_max=('V_LD_SEC_B', np.max),
[many more columns ]
X_DOG_A_count=('X_DOG_A', np.count_nonzero),
X_DOG_B_count=('X_DOG_B', np.count_nonzero),
X_DOG_C_count=('X_DOG_C', np.count_nonzero),
X_DOG_count=('X_DOG', np.count_nonzero),
X_NEU_LO_count=('X_NEU_LO', np.count_nonzero),
CVR_X_ENGAGED_A_pct=('CVR_X_ENGAGED_A', lambda x: (
np.sum(x) / np.size(x))*100),
CVR_X_ENGAGED_B_pct=('CVR_X_ENGAGED_B', lambda x: (
np.sum(x) / np.size(x))*100),
CVR_X_ENGAGED_C_pct=('CVR_X_ENGAGED_C', lambda x: (
np.sum(x) / np.size(x))*100),
CVR_X_ENGAGED_3PH_pct=('CVR_X_ENGAGED_3PH',
lambda x: (np.sum(x) / np.size(x))*100)
).reset_index(drop=True)
在此示例中,如果 df 中缺少列“V_LD_SEC_B”,则整个聚合函数将失败。我想要返回的是添加了缺失列的 df_agg,其中 NaN 作为值。我是否必须遍历整个数据框,创建不存在的列,或者我可以以某种方式内联它们的创建?