hãy tưởng tượng một gấu trúc
khung dữ liệu bao gồm
df = pd.DataFrame({
'id': [1, 1, 1, 2, 2],
'vị trí': [1, 2, 3, 1, 2],
'date': [pd.to_datetime('01-01-{}'.format(year)) cho năm trong [2015, 2016, 2015, 2017, 2018]]
}).set_index('id')
trông như thế này
ngày địa điểm
NHẬN DẠNG
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
Bây giờ tôi muốn date
Tạo một cột cho mỗi năm được đại diện bởi NHẬN DẠNG
Đếm số lần xuất hiện Vì vậy, khung dữ liệu được tạo sẽ trông như thế này
địa điểm ngày 2015 2016 2017 2018
NHẬN DẠNG
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
Bây giờ tôi tưởng tượng sử dụng pd.groupby.transform
Nhưng tôi không thể nghĩ ra giải pháp tốt nhất.
Giải pháp của riêng tôi là
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)
get_dummies
df.join(pd.get_dummies(df.date.dt.year).sum(level=0))
ngày địa điểm 2015 2016 2017 2018
NHẬN DẠNG
1 2015-01-01 1 2 1 0 0
1 2016-01-01 2 2 1 0 0
1 2015-01-01 3 2 1 0 0
2 2017-01-01 1 0 0 1 1
2 2018-01-01 2 0 0 1 1
分解
i, r = pd.factorize(df.index)
j, c = pd.factorize(df.date.dt.year)
n, m = hình = len(r), len(c)
b = np.zeros(hình dạng, dtype=np.int64)
np.add.at(b, (i, j), 1)
df.join(pd.DataFrame(b, r, c).rename_axis('id'))
ngày địa điểm 2015 2016 2017 2018
NHẬN DẠNG
1 2015-01-01 1 2 1 0 0
1 2016-01-01 2 2 1 0 0
1 2015-01-01 3 2 1 0 0
2 2017-01-01 1 0 0 1 1
2 2018-01-01 2 0 0 1 1
Tôi là một lập trình viên xuất sắc, rất giỏi!