您可以使用apply
创建列“数据点”:
df['datapoint'] = df.apply(lambda row: (row['year'],row['month'],
row['price'],row['volume']),1)
或者
df['datapoint_better'] = df.apply(lambda row: {(row['year'],row['month']):
{row['price'],row['volume']}},1)
正如我所说,你不能{row['year'],row['month']}
作为字典中的键
然后,如果您想驾驭这些列:
df = df.drop(['year','month','price','volume'],1)
编辑:好的,我错过了 groupby,无论如何,您可以先使用键和项目创建两列:
df['key'] = df.apply(lambda row: ( row['year'], row['month']),1)
df['item'] = df.apply(lambda row: { row['price'], row['volume']},1)
然后你groupby
用这两列apply
来做和做,pd.Series.to_dict
例如:
df_output = (df.groupby(['country','region'])
.apply(lambda df_grouped: pd.Series(df_grouped.item.values,
index=df_grouped.key).to_dict())
.reset_index().rename(columns={0:'datapoints'}))
reset_index
并且rename
是得到预期的输出
注意:我建议也使用tuple
该项目,而不是set
防止任何set
未订购的订单问题。