我有一个看起来像这样的dataFrame:
Date Yearly_cost
2009-01-01 230
2010-03-03 260
2009-01-01 320
2007-03-02 430
同一dataFrame包含Date的多个重复值,但Yearly_cost的值不同。我想对日期进行分组,以便我有一个一致的时间序列,并且每天都有所有相应的值。但是我希望它返回一个df而不是一个groupby对象。
所需的结果将如下所示:
Date Yearly_cost
2007-03-02 430
2009-01-01 230, 320
2010-03-03 260
任何帮助将不胜感激
答案 0 :(得分:1)
假设您具有以下df:
df1 = pd.DataFrame({'Date': ['2009-01-01', '2009-01-01', '2010-03-03' , '2010-03-03', '2004-04-03' ,'2007-03-02'],
'Yearly_cost': [230 ,460, 260, 250, 320 ,430],})
df1
df1
Date Yearly_cost
0 2009-01-01 230
1 2009-01-01 460
2 2010-03-03 260
3 2010-03-03 250
4 2004-04-03 320
5 2007-03-02 430
您可以执行以下操作:
df1['Yearly_cost'] = df1.Yearly_cost.astype(str)
df1.groupby('Date')['Yearly_cost'].apply(','.join)
结果:
Date
2004-04-03 320
2007-03-02 430
2009-01-01 230,460
2010-03-03 260,250
Name: Yearly_cost, dtype: object
为了使上面的数据帧:
df1['Yearly_cost'] = df1.Yearly_cost.astype(str)
combined = df1.groupby('Date')['Yearly_cost'].apply(','.join)
pd.DataFrame(combined)
您会得到:
Yearly_cost
Date
2004-04-03 320
2007-03-02 430
2009-01-01 230,460
2010-03-03 260,250
答案 1 :(得分:1)
要回答修订后的问题,请使用:
df.groupby('Date')['Yearly_cost'].apply(list).reset_index(name='Yearly_cost')
例如,如果要更改[320]
至320
,请执行以下操作:
df.groupby('Date')['Yearly_cost'].apply(list).apply(lambda x: x[0] if len(x) == 1 else x).reset_index(name='Yearly_cost')