cuốn sách gpt4 ai đã làm

android — Đếm số lần xuất hiện mỗi năm trong khung dữ liệu Pandas dựa trên các nhóm con

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 13:07:53 28 4
mua khóa gpt4 Nike

hãy tưởng tượng một gấu trúckhung 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.transformNhư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)

câu trả lời hay nhất

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

Về python - Đếm số lần xuất hiện mỗi năm trong khung dữ liệu Pandas dựa trên các nhóm con, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/52256120/

28 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress