我有一个熊猫DataFrame
,我已经组合了三列A, B, C
。保持每个数据帧组中的一个(不变)行
grouped = df.groupby(["A", "B", "C"])
几个附加列D, E, F, G
被(保证的)为每个组中的所有元素是相同的,而在每个组内X, Y
变化等栏目。 (我已经知道哪些列是固定的,哪些是不同的。)
我想构建一个数据框,每个组包含一行,并且只包含不变列A, B, C, D, E, F, G
的值。什么是最直接的方式来做到这一点?由于有很多相同的值,我宁愿指定要省略的列,而不是相反的方式。
我已经从每组中选择一列,然后在单独的步骤删除不需要的列拿出“聚集”:
thinned = grouped.aggregate(lambda x: x.iloc[0])
del thinned["X"], thinned["Y"]
这样做的目的是为了不变量值与结合在每个(当前)组有一行的数据框中计算几个新的汇总值。
thinned["newAA"] = grouped.apply(some_function)
thinned["newBB"] = grouped.apply(other_function)
...
但我怀疑肯定有一个不太圆的方式。
为什么不干脆不'groupby'之前,首先选择那些列?例如'df [df.columns.difference(['X','Y'])]。groupby(['A','B','C'])' – EdChum
这是一个好主意,但我也需要合并在分组列上计算的数据帧会有所不同。所以它可能会起作用,但我需要小心索引。 – alexis
对我来说,对于我来说,只是看起来多余,然后放下你不感兴趣的列,最好不要在操作之前选择它们。 – EdChum