假設我有一個資料集,其中包含一些人過去 5 個月的資料。我想創建一些與這 5 個月中的每一個相關的功能,例如:
我的初始資料框看起來像這樣:
| 人 | 日期 | 吃過的水果 |
|---|---|---|
| 甲 | 25-01-2015 | 2 |
| 乙 | 29-01-2015 | 3 |
| 甲 | 13-02-2015 | 0 |
| 甲 | 14-05-2015 | 10 |
| 甲 | 19-05-2015 | 11 |
我希望我的資料框從下面看起來像這樣:因此,創建與月和年(按月和年分組)相關的 5 個(或更多列,可能對應于 2015 年所有 12 個月的 12 個),然后放入相應的特征是基于月份和年份的水果食用列數和總和。
| 人 | 01-2015_尺寸 | 02-2015_尺寸 | 03-2015_尺寸 | 04-2015_尺寸 | 05-2015_尺寸 | 01-2015_水果 | 02-2015_水果 | 03-2015_水果 | 04-2015_水果 | 05-2015_水果 |
|---|---|---|---|---|---|---|---|---|---|---|
| 甲 | 2 | 1 | 0 | 0 | 2 | 2 | 0 | 0 | 0 | 21 |
| 乙 | 1 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 0 |
你能建議我怎么做嗎?
uj5u.com熱心網友回復:
您可以使用groupby_agg創建所需的值然后創建pivot資料框。在您必須創建自定義索引以獲取預期列之前。
# Create your custom index (variables, dates)
dti = pd.date_range(df['date'].min(), df['date'].max() pd.DateOffset(months=1),
freq='M').strftime('%m-%Y')
mi = pd.MultiIndex.from_product([['size', 'fruits'], dti])
# Reformat your dataframe
out = df.assign(date=df['date'].dt.strftime('%m-%Y')) \
.groupby(['Person', 'date']) \
.agg(size=('date', 'size'), fruits=('fruits eaten', 'sum')) \
.unstack('date').reindex(columns=mi).fillna(0).astype(int)
# Rename your columns like 'month-year_variable'
out.columns = out.columns.swaplevel().to_flat_index().str.join('_')
輸出:
>>> out
01-2015_size 02-2015_size 03-2015_size 04-2015_size 05-2015_size 01-2015_fruits 02-2015_fruits 03-2015_fruits 04-2015_fruits 05-2015_fruits
Person
Person A 1 1 0 0 2 2 0 0 0 21
Person B 1 0 0 0 0 3 0 0 0 0
uj5u.com熱心網友回復:
首先,如果日期列是字串,我建議你運行下面的代碼。
df.date = pd.to_datetime(df.date).dt.strftime('%Y_%m')
然后我們按進??程運行組。
df = df.groupby(by=['Person','date'])['fruits eaten'].sum().reset_index()
最后,我們運行樞軸操作。
df = df.pivot(index='Person', columns='date', values='fruits eaten')
我希望你的問題會得到解決。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344869.html
