Python 对于每一行,如何从相同的字符串开始对列的值求和
编辑:列名确实以超过1个字符开头,但以sep=''开头,更像是AAA_BBB,AAA_DDD,BBB_EEE,BBB_FFF 感谢groupby解决方案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
我有一个这样的熊猫数据框架(借用另一个问题): 我怎样才能得到一个新的数据帧,其中的列总和具有相同的“起始字符串”,例如“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