如何分组后获得包含所有行的数据帧?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何分组后获得包含所有行的数据帧?相关的知识,希望对你有一定的参考价值。
我有一个数据帧:
DF
Date Close Open
0 2012-01-02 348.36 342.19
1 2012-01-03 355.23 350.24
2 2012-01-04 354.00 352.84
3 2012-01-05 352.23 352.12
4 2012-01-06 351.24 351.97
该df
有14000行。
我想groupby
年份和月份,并得到一个multiindex
数据帧。
df['Date'] = pd.to_datetime(df['Date'])
# df.set_index('Date',inplace=True,drop=True)
df1 = df.groupby([df.Date.dt.year.rename('year'),df.Date.dt.month.rename('month')]).values
我曾尝试.values
.count
(不给我预期的输出)。
预期输出:
df1
year month Date Close Open
2012 1 2012-01-02 348.36 342.19
2012-01-03 355.23 350.24
2012-01-04 354.00 352.84
2012-01-05 352.23 352.12
2012-01-06 351.24 351.97
答案
使用set_index
:
df['Date'] = pd.to_datetime(df['Date'])
df1 = df.set_index([df.Date.dt.year.rename('year'),df.Date.dt.month.rename('month')])
类似与rename_axis
:
df1 = df.set_index([df.Date.dt.year,df.Date.dt.month]).rename_axis(['year','month'])
print (df1)
Date Close Open
year month
2012 1 2012-01-02 348.36 342.19
1 2012-01-03 355.23 350.24
1 2012-01-04 354.00 352.84
1 2012-01-05 352.23 352.12
1 2012-01-06 351.24 351.97
另一种解决方案(更详细):
df.index = pd.MultiIndex.from_arrays([df.Date.dt.year.rename('year'),
df.Date.dt.month.rename('month')])
df.index = pd.MultiIndex.from_arrays([df.Date.dt.year,
df.Date.dt.month], names=('year','month'))
以上是关于如何分组后获得包含所有行的数据帧?的主要内容,如果未能解决你的问题,请参考以下文章
如何有效地过滤由两列groupby操作获得的数据帧,以仅包含第二个索引的最大值和最小值?