我有数据框

ID   2016-01   2016-02 ...  2017-01  2017-02 ... 2017-10  2017-11  2017-12
111    12        34           0        12          3        0        0
222    0         32           5         5          0        0        0

我需要每12列数一次
ID   2016   2017
111   46     15
222   32     10

我试着用
(df.groupby((np.arange(len(df.columns)) // 31) + 1, axis=1).sum().add_prefix('s'))

但它返回到所有列
但是当我试图使用
df.groupby['ID']((np.arange(len(df.columns)) // 31) + 1, axis=1).sum().add_prefix('s'))

它又回来了
TypeError: 'method' object is not subscriptable

我该怎么解决?

最佳答案

所有没有日期的列中的第一个set_index

df = df.set_index('ID')

一。groupbybysplited列并首先选择:
df = df.groupby(df.columns.str.split('-').str[0], axis=1).sum()

2。lambda分割功能:
df = df.groupby(lambda x: x.split('-')[0], axis=1).sum()

三。将列转换为日期时间和groupby年:
df.columns = pd.to_datetime(df.columns)
df = df.groupby(df.columns.year, axis=1).sum()

四。resample通过years
df.columns = pd.to_datetime(df.columns)
df = df.resample('A', axis=1).sum()
df.columns = df.columns.year

print (df)
     2016  2017
ID
111    46    15
222    32    10

关于python - Pandas :每N列之和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46607027/

10-12 21:43