熊猫理解 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的主要内容,如果未能解决你的问题,请参考以下文章