gpt4 book ai didi

python - 分组依据、聚合、包括单独的列

转载 作者:太空宇宙 更新时间:2023-11-04 02:01:41 24 4
gpt4 key购买 nike

这是我的数据:

foo = pd.DataFrame({
'accnt' : [101, 102, 103, 104, 105, 101, 102, 103, 104, 105],
'gender' : [0, 1 , 0, 1, 0, 0, 1 , 0, 1, 0],
'date' : pd.to_datetime(["2019-01-01 00:10:21", "2019-01-05 00:09:18", "2019-01-05 00:09:30", "2019-02-05 00:05:12", "2019-04-01 00:08:46",
"2019-04-01 00:11:31", "2019-02-06 00:01:39", "2019-01-26 00:15:14", "2019-01-21 00:12:36", "2019-03-01 00:09:31"]),
'value' : [10, 20, 30, 40, 50, 5, 2, 6, 48, 96]
})

这是:

   accnt    date                gender  value
0 101 2019-01-01 00:10:21 0 10
1 102 2019-01-05 00:09:18 1 20
2 103 2019-01-05 00:09:30 0 30
3 104 2019-02-05 00:05:12 1 40
4 105 2019-04-01 00:08:46 0 50
5 101 2019-04-01 00:11:31 0 5
6 102 2019-02-06 00:01:39 1 2
7 103 2019-01-26 00:15:14 0 6
8 104 2019-01-21 00:12:36 1 48
9 105 2019-03-01 00:09:31 0 96

我想做以下事情:- 按accnt分组,包括gender,以最近的datelatest_date,统计交易次数为 txn_count;结果:

  accnt  gender         latest_date        txn_count
101 0 2019-04-01 00:11:31 2
102 1 2019-02-06 00:01:39 2
103 0 2019-01-26 00:15:14 2
104 1 2019-02-05 00:05:12 2
105 0 2019-04-01 00:08:46 2

在 R 中,我可以使用 dplyr 中的 group_bysummarise 来做到这一点:

foo %>% group_by(accnt) %>% 
summarise(gender = last(gender), most_recent_order_date = max(date), order_count = n()) %>% data.frame()

我将 last(gender) 包含在内,因为 gender 对于任何 accnt 都是相同的,我可以采用 minmaxmean 也可以。

我如何使用 pandas 在 python 中做同样的事情?

我试过:

foo.groupby('accnt').agg({'gender' : ['mean'],
'date': ['max'],
'value': ['count']}).rename(columns = {'gender' : "gender",
'date' : "most_recent_order_date",
'value' : "order_count"})

但这会导致“额外的”列名。我还想知道在结果中包含非聚合列(如 gender)的最佳方法是什么。

最佳答案

在 R 中 summarise 将等于 aggmutate 等于 transform

列中有多个索引的原因:由于您使用 list 传递函数调用,这意味着您可以执行类似 {'date':['mean','总和']}

foo.groupby('accnt').agg({'gender' : 'first',
'date': 'max',
'value': 'count'}).rename(columns = {'date' : "most_recent_order_date",
'value' : "order_count"}).reset_index()
Out[727]:
accnt most_recent_order_date order_count gender
0 101 2019-04-01 00:11:31 2 0
1 102 2019-02-06 00:01:39 2 1
2 103 2019-01-26 00:15:14 2 0
3 104 2019-02-05 00:05:12 2 1
4 105 2019-04-01 00:08:46 2 0

一些例子:这里我为一个columns同时调用了两个函数,这意味着应该有两个levelindex来制作确保输出列名称没有重复

foo.groupby('accnt').agg({'gender' : ['first','mean']})
Out[728]:
gender
first mean
accnt
101 0 0
102 1 1
103 0 0
104 1 1
105 0 0

关于python - 分组依据、聚合、包括单独的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55555010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com