gpt4 book ai didi

pandas - 在 groupby 对象上应用 set_index 以便为每个组应用 asfreq

转载 作者:行者123 更新时间:2023-12-01 03:18:43 24 4
gpt4 key购买 nike

我想申请 pading在我的数据框的每一组上

请注意,对于单个组('element_id'),我在填充方面没有问题:

第一组(group1):

{'date': {88: datetime.date(2017, 10, 3), 43: datetime.date(2017, 9, 26), 159: datetime.date(2017, 11, 8)}, u'element_id': {88: 122, 43: 122, 159: 122}, u'VALUE': {88: '8.0', 43: '2.0', 159: '5.0'}}

所以我在它上面应用填充(效果很好):
print group1.set_index('date').asfreq('D', method='pad').head()

我希望通过 groupby 将此逻辑应用于多个组

另一组(group2):
{'date': {88: datetime.date(2017, 10, 3), 43: datetime.date(2017, 9, 26), 159: datetime.date(2017, 11, 8)}, u'element_id': {88: 122, 43: 122, 159: 122}, u'VALUE': {88: '8.0', 43: '2.0', 159: '5.0'}}

group_data=pd.concat([group1,group2],axis=0)
group_data.groupby(['element_id']).set_index('date').resample('D').asfreq()

我收到以下错误:
AttributeError: Cannot access callable attribute 'set_index' of 'DataFrameGroupBy' objects, try using the 'apply' method

最佳答案

首先你的date有问题栏目有dtype对象,而不是日期时间,所以首先需要通过 to_datetime 来转换它.

那么可以使用 GroupBy.apply :

group_data['date'] = pd.to_datetime(group_data['date'])

df = (group_data.groupby(['element_id'])
.apply(lambda x: x.set_index('date').resample('D').ffill()))

print (df.head())

VALUE element_id
element_id date
122 2017-09-26 2.0 122
2017-09-27 2.0 122
2017-09-28 2.0 122
2017-09-29 2.0 122
2017-09-30 2.0 122

DataFrameGroupBy.resample :
    df = group_data.set_index('date').groupby(['element_id']).resample('D').ffill()
print (df.head())
VALUE element_id
element_id date
122 2017-09-26 2.0 122
2017-09-27 2.0 122
2017-09-28 2.0 122
2017-09-29 2.0 122
2017-09-30 2.0 122

编辑:

如果重复值问题的解决方案是为具有唯一 dates 的子组添加新列.如果使用 concat有参数 keys为了它:
group1 = pd.DataFrame({'date': {88: datetime.date(2017, 10, 3), 
43: datetime.date(2017, 9, 26),
159: datetime.date(2017, 11, 8)},
u'element_id': {88: 122, 43: 122, 159: 122},
u'VALUE': {88: '8.0', 43: '2.0', 159: '5.0'}})


d = {'level_0':'g'}
group_data=pd.concat([group1,group1], keys=('a','b')).reset_index(level=0).rename(columns=d)
print (group_data)
g VALUE date element_id
43 a 2.0 2017-09-26 122
88 a 8.0 2017-10-03 122
159 a 5.0 2017-11-08 122
43 b 2.0 2017-09-26 122
88 b 8.0 2017-10-03 122
159 b 5.0 2017-11-08 122


group_data['date'] = pd.to_datetime(group_data['date'])

df = (group_data.groupby(['g','element_id'])
.apply(lambda x: x.set_index('date').resample('D').ffill()))

print (df.head())

g VALUE element_id
g element_id date
a 122 2017-09-26 a 2.0 122
2017-09-27 a 2.0 122
2017-09-28 a 2.0 122
2017-09-29 a 2.0 122
2017-09-30 a 2.0 122

关于pandas - 在 groupby 对象上应用 set_index 以便为每个组应用 asfreq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47454219/

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