我有数据帧
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
Run Code Online (Sandbox Code Playgroud)
我需要计算每12列并得到
ID 2016 2017
111 46 15
222 32 10
Run Code Online (Sandbox Code Playgroud)
我试着用
(df.groupby((np.arange(len(df.columns)) // 31) + 1, axis=1).sum().add_prefix('s'))
Run Code Online (Sandbox Code Playgroud)
但它会返回所有列但是当我尝试使用时
df.groupby['ID']((np.arange(len(df.columns)) // 31) + 1, axis=1).sum().add_prefix('s'))
Run Code Online (Sandbox Code Playgroud)
它回来了
TypeError: 'method' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
首先set_index是没有日期的列:
df = df.set_index('ID')
Run Code Online (Sandbox Code Playgroud)
1. groupby通过splited列并首先选择:
df = df.groupby(df.columns.str.split('-').str[0], axis=1).sum()
Run Code Online (Sandbox Code Playgroud)
2. lambda分裂功能:
df = df.groupby(lambda x: x.split('-')[0], axis=1).sum()
Run Code Online (Sandbox Code Playgroud)
3.将列转换为日期时间和groupby年份:
df.columns = pd.to_datetime(df.columns)
df = df.groupby(df.columns.year, axis=1).sum()
Run Code Online (Sandbox Code Playgroud)
4. resample通过years:
df.columns = pd.to_datetime(df.columns)
df = df.resample('A', axis=1).sum()
df.columns = df.columns.year
Run Code Online (Sandbox Code Playgroud)
print (df)
2016 2017
ID
111 46 15
222 32 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1431 次 |
| 最近记录: |