【发布时间】:2018-09-10 19:07:44
【问题描述】:
想象一个由
给出的pandasdataframe
df = pd.DataFrame({
'id': [1, 1, 1, 2, 2],
'location': [1, 2, 3, 1, 2],
'date': [pd.to_datetime('01-01-{}'.format(year)) for year in [2015, 2016, 2015, 2017, 2018]]
}).set_index('id')
看起来像这样
location date
id
1 1 2015-01-01
1 2 2016-01-01
1 3 2015-01-01
2 1 2017-01-01
2 2 2018-01-01
现在我想为datecolumn 中表示的每一年创建一个列,计算id 的出现次数。因此生成的数据框应该是这样的
location date 2015 2016 2017 2018
id
1 1 2015-01-01 2 1 0 0
1 2 2016-01-01 2 1 0 0
1 3 2015-01-01 2 1 0 0
2 1 2017-01-01 0 0 1 1
2 2 2018-01-01 0 0 1 1
现在我想使用pd.groupby.transform,但我想不出最佳解决方案。
我自己的解决方案是
df['year'] = df['date'].map(lambda x: x.year)
df = pd.merge(
df,
pd.pivot_table(df, 'date', 'id', 'year', 'count').fillna(0).astype(int),
left_index=True, right_index=True).drop('year', axis=1)
【问题讨论】:
标签: python pandas dataframe pandas-groupby