Вы можете использовать apply
для создания столбца 'datapoint':
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)
РЕДАКТИРОВАТЬ: хорошо, я пропустил группу, в любом случае, вы можете сначала создать два столбца с ключами иitem:
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
не заказан.