pandas 如何将每月列汇总为季度列和年度列?

cuxqih21  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(135)

几天前开始使用python,在遇到这个问题之前一直过得比较好。我有一个带有一些数值数据的数组,这些数据被分成YYYYMM列。
举例来说:
| | 201004 | 201005 | 201006 | 201007 | 201008 | 201008 |
| --|--|--|--|--|--|--|
| 一| 10 | 11 | 14 | 22 | 10 | 19 |
| B| 14 | 19 | 20 | 22 | 26 | 11 |
上面的示例数据从201003到201008,但数据取决于用户想要拉取的年份和月份(例如,201006-201303可以是另一个拉取)。
有没有一种方法,我可以对列求和,而不需要特别写201004,201005,201006,作为2010 q2的总和?
此外,我可以把所有的总和到不同的季度/年度列中的结构?
对于季刊,我完全不知道我该做什么。
对于annual,我用列名做了一个列表,然后将这些名字四舍五入到年份(2010年,2011年,等等),然后我在stackoverflow上发现了一个代码,它可以使用年份列表创建一个新的变量。它有map和regenx。我不能提供完整的代码,因为我在决定在stackoverflow上发布这个问题之前已经删除了它。
抱歉,任何帮助都将不胜感激。
编辑:我有多行,而不仅仅是一行。

jbose2ul

jbose2ul1#

如果您使用df.melt(),您可以将这些列转换为行,这可以帮助您将年-月分成两部分。

df = df.melt()
df
   variable  value
0    201004     10
1    201004     10
2    201005     14
...

字符串
从这里开始,使用df ['variable'].str根据字符数拆分字符串。

df['year'] = df['variable'].str[:4]
df['month'] = df['variable'].str[4:]


对于季度,可以从月份值Map到季度,然后使用df.map()

month_quarter_map = {'01':1,'02':1,'03':1,'04':2...}

df['quarter'] = df['month'].map(month_quarter_map)

xxhby3vn

xxhby3vn2#

验证码

groupby + axis=1,列的周期数据

freq = 'Q' 
grp = pd.to_datetime(df.columns, format='%Y%m').to_period(freq)
out = df.groupby(grp, axis=1).sum()

字符串
输出:

2010Q1  2010Q2  2010Q3
A   10      47      29
B   14      61      37


我做了一个变量freq,所以你可以很容易地改变频率。如果你把freq改为'Y',你可以得到每年的总和。

示例代码

import pandas as pd
data1 = {'201003': {'A': 10, 'B': 14},
         '201004': {'A': 11, 'B': 19},
         '201005': {'A': 14, 'B': 20},
         '201006': {'A': 22, 'B': 22},
         '201007': {'A': 10, 'B': 26},
         '201008': {'A': 19, 'B': 11}}
df = pd.DataFrame(data1)

相关问题