熊猫理解 groupby

Posted

技术标签:

【中文标题】熊猫理解 groupby【英文标题】:Pandas understanding groupby 【发布时间】:2021-12-24 01:29:31 【问题描述】:

我有一个如下的数据框

import pandas as pd
import numpy as np
df = 'a': ['xxx', 'xxx','xxx','yyy','yyy','yyy'], 'start': [10000, 10500, 11000, 12000, 13000, 14000], 'day':['2018-10-08',
'2018-09-26',
'2018-08-07',
'2018-10-04',
'2019-02-06',
'2019-02-10'] 
df = pd.DataFrame(data=df)
df["day2"] = pd.to_datetime(df['day']).dt.date
print (df)
print (df.dtypes)



     a  start         day        day2
0  xxx  10000  2018-10-08  2018-10-08
1  xxx  10500  2018-09-26  2018-09-26
2  xxx  11000  2018-08-07  2018-08-07
3  yyy  12000  2018-10-04  2018-10-04
4  yyy  13000  2019-02-06  2019-02-06
5  yyy  14000  2019-02-10  2019-02-10
a        object
start     int64
day      object
day2     object
dtype: object

当我使用as_index=False 时,我得到如下输出 - 这很有意义

df.groupby('a',as_index=False).agg('start':'first','day2':'min')
    a   start   day2
0   xxx 10000   2018-08-07
1   yyy 12000   2018-10-04

question 1) 但是为什么我在下面运行时没有得到a 列?

df2=df.copy()
df4=df2.groupby('a',as_index=False)['day2'].apply(list)
print(df4)

0    [2018-10-08, 2018-09-26, 2018-08-07]
1    [2018-10-04, 2019-02-06, 2019-02-10]
dtype: object
===============================

如果我不使用as_index=False,我会得到该列。

print ("===============================")
print (df2.groupby('a')['day2'].apply(list))
a
xxx    [2018-10-08, 2018-09-26, 2018-08-07]
yyy    [2018-10-04, 2019-02-06, 2019-02-10]










question 2) why `transform` is not working?

df2.groupby('a')['day2'].transform(list)
0    2018-10-08
1    2018-09-26
2    2018-08-07
3    2018-10-04
4    2019-02-06
5    2019-02-10
Name: day2, dtype: object

question 3) 有没有可以与 groupby 一起使用的函数列表,例如 max, min, first, last

【问题讨论】:

【参考方案1】:

您的第一个问题应用它不会显示该列,但我们可以做agg

df2.groupby('a',as_index=False)['day2'].agg(list)
Out[15]: 
     a                                  day2
0  xxx  [2018-10-08, 2018-09-26, 2018-08-07]
1  yyy  [2018-10-04, 2019-02-06, 2019-02-10]

修复变换

df2.groupby('a')['day2'].transform(lambda x : [x.tolist()]*len(x))
Out[19]: 
0    [2018-10-08, 2018-09-26, 2018-08-07]
1    [2018-10-08, 2018-09-26, 2018-08-07]
2    [2018-10-08, 2018-09-26, 2018-08-07]
3    [2018-10-04, 2019-02-06, 2019-02-10]
4    [2018-10-04, 2019-02-06, 2019-02-10]
5    [2018-10-04, 2019-02-06, 2019-02-10]
Name: day2, dtype: object

但是,对你来说,下面的第二个问题更好

df2.a.map(df2.groupby('a')['day2'].agg(list))

第三个问题

df2.groupby(a)['day2'].agg(['max', 'min', 'first', 'last'])

【讨论】:

谢谢。你能回答第三个问题吗 @user2543622 已更新 有我可以使用的功能列表吗? @user2543622 函数列表是什么意思?大多数功能可以与 groupby 一起使用,当它们是 agg 我的意思是我可以使用哪些不同的功能?我可以获得完整的可用功能列表吗?

以上是关于熊猫理解 groupby的主要内容,如果未能解决你的问题,请参考以下文章

对熊猫中相同行的列表理解[重复]

如何提高熊猫数据框的列表理解速度

如何理解熊猫重采样方法中的封闭和标签参数?

熊猫:啥是视图?

熊猫替换/字典缓慢

astype 熊猫的错误​​?