Вы можете выбрать, какие столбцы следует суммировать со списком имен столбцов, используя подзаголовок в группе pandas. Это то, что вы ищете?
import numpy as np
import pandas as pd
data = {
"dim1": [np.random.choice(['foo', 'bar']) for _ in range(10)],
"measure1": np.random.random_integers(0, 100, 10),
"measure2": np.random.random_integers(0, 100, 10)
}
df = pd.DataFrame(data)
df
Out[1]:
dim1 measure1 measure2
0 bar 9 86
1 bar 24 64
2 bar 47 46
3 foo 60 98
4 bar 94 53
5 foo 95 89
6 foo 98 9
7 bar 4 95
8 foo 63 66
9 foo 40 47
df.groupby(['dim1'])['measure1', 'measure2'].sum()
Out[2]:
measure1 measure2
dim1
bar 178 344
foo 356 309
обновление 2015-01-02Задержка ответа на комментарии ниже, но лучше поздно, чем никогда
Если вы не знаете, сколько столбцов у вас есть, но вы знаете столбец именования, постройте список столбцов для динамического объединения. вот один из способов:
colnames = ["measure".format(i+1) for i in range(100)] # make 100 fake columns
df = pd.DataFrame(np.ones((10, 100)), columns=colnames)
df['dim1'] = [np.random.choice(['foo', 'bar']) for _ in range(10)] # add fake dimension to groupby
desired_columns = [col for col in df.columns if "94" in col or "95" in col] # select columns 94 and 95
df.groupby(['dim1'])[desired_columns].sum()
Out[52]:
measure94 measure95
dim1
bar 4 4
foo 6 6
Спасибо за пример. В моем случае около 30 столбцов: «measure1», «measure2» ... «measure30». Тем не менее, я хочу применить sum() к 'measure1' ... 'measure20'. есть способ df.groupby (['dim1']) ['measure1', 'measure2']. sum() может быть записана без необходимости писать все 20 имен столбцов. Это важно, потому что некоторые из моих имен столбцов генерируются программно, и я не знаю их имен заранее. – user308827
ok, переместил имена столбцов в список. теперь он сделает то, что я хочу. благодаря! – user308827