Python 对于每一行,如何从相同的字符串开始对列的值求和

Python 对于每一行,如何从相同的字符串开始对列的值求和,python,pandas,dataframe,Python,Pandas,Dataframe,编辑:列名确实以超过1个字符开头,但以sep=''开头,更像是AAA_BBB,AAA_DDD,BBB_EEE,BBB_FFF 感谢groupby解决方案 我有一个这样的熊猫数据框架(借用另一个问题): 我怎样才能得到一个新的数据帧,其中的列总和具有相同的“起始字符串”,例如“C”、“T”?谢谢 df = C T 62 33 145 99 不幸的是,我必须处理数据帧的这种结构,数据帧中大约有1000列,看起来像A1、A2、A3、B1、B2、B3、pandas.d

编辑:列名确实以超过1个字符开头,但以sep=''开头,更像是AAA_BBB,AAA_DDD,BBB_EEE,BBB_FFF

感谢groupby解决方案


我有一个这样的熊猫数据框架(借用另一个问题):

我怎样才能得到一个新的数据帧,其中的列总和具有相同的“起始字符串”,例如“C”、“T”?谢谢

df =

C     T  
62    33    
145   99
不幸的是,我必须处理数据帧的这种结构,数据帧中大约有1000列,看起来像A1、A2、A3、B1、B2、B3、

pandas.dataframe.groupby
axis=1
OP对列名的一般特征含糊不清。请阅读各种选项,以确定哪些选项更适合您的具体情况

callable
version#1 假设列前缀是单个字符

from operator import itemgetter

df.groupby(itemgetter(0), axis=1).sum()

     C   T
0   62  33
1  145  99
当您将可调用的
传递给
pandas.DataFrame.groupby
时,它会将可调用的映射到索引(如果
axis=1
,则映射到列),并让唯一的结果充当分组键


callable
version#2:推出我们自己的 稍微复杂一点,但对于不仅仅是单个字符前缀应该是健壮的。而且,不使用导入

def yield_while_alpha(x):
    it = iter(x)
    y = next(it)
    while y.isalpha():
        yield y
        y = next(it)

def get_prefix(x):
    return ''.join(yield_while_alpha(x))

df.groupby(get_prefix, axis=1).sum()

     C   T
0   62  33
1  145  99
同样的想法,但使用
itertools

from itertools import takewhile

df.groupby(
    lambda x: ''.join(takewhile(str.isalpha, x)),
    axis=1
).sum()

     C   T
0   62  33
1  145  99

pandas.Index.str.extract
或者我们不必使用
callable

df.groupby(df.columns.str.extract('(\D+)', expand=False), axis=1).sum()

     C   T
0   62  33
1  145  99

使用
多索引
的替代方法:

df.columns = [df.columns.str[0], df.columns]
df.groupby(level=0, axis=1).sum()
使用

输出:

     C   T
0   62  33
1  145  99
 df.groupby(df.columns.str[0], axis=1).sum()
     C   T
0   62  33
1  145  99