列标题前缀上的GroupBy列

2024-05-20 00:04:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe,它的列名以一组前缀列表开头。我想得到数据帧中按以相同前缀开头的列分组的值的总和。在

df = pd.DataFrame([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]],
              columns=['abc', 'abd', 'wxy', 'wxz'])
prefixes = ['ab','wx']
df
    abc abd wxy wxz
0   1   2   3   4
1   1   2   3   4
2   1   2   3   4
3   1   2   3   4

我想知道如何做的唯一方法是遍历前缀列表,从以该字符串开始的数据帧中获取列,然后求和结果。在

^{pr2}$

我希望有一种更优雅的方法来实现它,也许是使用groupby(),但我想不出来。在


Tags: columns数据方法dataframedf列表abpd
2条回答

首先,有必要确定哪些列包含什么前缀。然后我们使用它来执行groupby。在

grouper = [next(p for p in prefixes if p in c) for c in df.columns]
u = df.groupby(grouper, axis=1).sum()

   ab  wx
0   3   7
1   3   7
2   3   7
3   3   7

快到了,现在

^{pr2}$

另一个选项是使用np.char.startswithargmax来矢量化:

idx = np.char.startswith(
    df.columns.values[:, None].astype(str), prefixes).argmax(1)

(pd.Series(df.groupby(idx, axis=1).sum().sum().values, index=prefixes)
   .to_frame()
   .transpose())

   ab  wx
0  12  28

在对列切片后使用groupby

df.groupby(df.columns.str[:-1],axis=1).sum().sum().to_frame().T
Out[317]: 
   ab  wx
0  12  28

更新

^{pr2}$

相关问题 更多 >