[python] groupby的几种输出格式

[python] groupby的几种输出格式

发现PYTHON groupby使用的过程种,会出现三种不同的输出格式,特写此片文章记录::
为方便演示,使用以下数据作为案例数据,做groupby(‘code’)[‘data’].rolling(2).min()处理

df = pd.DataFrame({"date":["2021-01-01","2021-01-01","2021-01-02","2021-01-02","2021-01-03","2021-01-03"],
                  "code":["001.sh","002.sh","001.sh","002.sh","001.sh","002.sh"],
                   "report_date":["2020q1",'2020q1',"2020q2",'2020q2',"2020q3",'2020q3'],
                  "data":[1,2,3,4,5,6],
                  "data1":[1,1,1,1,1,1]})
df.loc[:,"date"] = df['date'].astype('datetime64')

第一种:输出为Series格式

df.groupby('code')['data'].rolling(2).min()

输出为:格式为Series格式
在这里插入图片描述
第二种:输出为dataframe格式
如果我想要输出的数据有索引,用如下写法
(貌似只有分组后得数据得索引一致才会出现以下情况,如下图,每个code的索引一致)

def test2(x):
    data = x.copy()
    return data.min()
    
def test1(x,factor):
#     data = x[['report_date',factor]].copy()
#     res = data.rolling(2).apply(test2)
    data = x.copy()
    data.set_index("report_date", inplace=True)
    res = data[factor].rolling(2).apply(test2)
    return res  
df.groupby('code').apply(test1,'data')

结果为
在这里插入图片描述
第三种:写为另一种写法:
输出为Series格式,但是带了索引

def test2(x):
    data = x.copy()
    return data.min()
    
def test1(x,factor):
    data = x.copy()
    data = x[['report_date',factor]].copy()
    data.set_index("report_date", inplace=True)
    res = data.rolling(2).apply(test2)
    
#     data.set_index("report_date", inplace=True)
#     res = data[factor].rolling(2).apply(test2)
    return res  
df.groupby('code').apply(test1,'data')

输出为
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值