gpt4 book ai didi

python - 具有非数字类型的 groupby/aggregate 数据框

转载 作者:太空宇宙 更新时间:2023-11-03 15:47:55 25 4
gpt4 key购买 nike

我有以下情况

date_range = pd.date_range('20180101', '20180105')
date_list = list(itertools.chain.from_iterable(itertools.repeat(date, 2) for date in date_range))
num_list = np.random.randint(1,100,size=(10))
date2 = ['2018-12-31']*10

df = pd.DataFrame({'date1':date_list,'numbers':num_list,'date2':date2})

显示这个数据框给

      date1        date2    numbers
0 2018-01-01 2018-12-31 38
1 2018-01-01 2018-12-31 2
2 2018-01-02 2018-12-31 8
3 2018-01-02 2018-12-31 51
4 2018-01-03 2018-12-31 16
5 2018-01-03 2018-12-31 22
6 2018-01-04 2018-12-31 43
7 2018-01-04 2018-12-31 76
8 2018-01-05 2018-12-31 47
9 2018-01-05 2018-12-31 50

我想获得一个新的数据框,它是 a) 按 date1 分组,b) 对数字列中每个 date1 的值求和,c) 保留 date2 值(我们可以假设它与每个 date1 或者,在这种情况下,整个数据框都相同

我可以执行以下操作来实现 a+b,但是如果我尝试在聚合字典中包含类似 'date2':'mean' 的内容,它将不起作用并返回 DataError: No numeric types to aggregate

df.groupby(['date1'],as_index=False).agg({'numbers':'sum'})

有什么建议吗?

最佳答案

如果每个组的 date2 都相同,您似乎需要:

df.groupby(['date1', 'date2'],as_index=False).agg({'numbers':'sum'})

或需要按 first 聚合:

df.groupby(['date1'],as_index=False).agg({'numbers':'sum','date2':'first'})

但是如果需要 datetimemean 就有点复杂了:

df['date2'] = pd.to_datetime(df['date2'])
f = lambda x: pd.to_datetime(x.values.astype(np.int64).mean())
df1 = df.groupby(['date1'],as_index=False).agg({'numbers':'sum','date2':f})
print (df1)
date1 numbers date2
0 2018-01-01 159 2018-12-31
1 2018-01-02 104 2018-12-31
2 2018-01-03 75 2018-12-31
3 2018-01-04 98 2018-12-31
4 2018-01-05 184 2018-12-31

关于python - 具有非数字类型的 groupby/aggregate 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48845333/

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