我有一個包含三列的資料框。第一個顯示用戶,第二個是日期,第三個顯示假期與否。(1 為節假日,0 為非節假日)。
import pandas as pd
df = pd.DataFrame()
df['user'] = ['a', 'a', 'b','b', 'c', 'c', 'c']
df['date'] = ['2012-01-01', '2012-01-03', '2012-01-01','2012-01-02', '2012-01-01', '2012-01-02','2012-01-03']
df['holiday'] = [1, 0, 1, 0, 1,0, 0]
我想為每個user and time,構建two列,然后將它們放在一起,如果用戶沒有日期,則放入2該列。例如,對于user=a,我們有兩個日期。然后,對于這個用戶,我應該構建1, 1, 2, 2, 0,0.或者,對于用戶 b,行是1, 1, 0,0, 2,2.
對于用戶 a:
- 日期 2012-01-01,我們有日期,因為它是假期。然后我們添加兩列 1, 1。
- 日期 2012-01-02 :我們沒有日期,然后我們用 2,2 構建兩列。
- 日期 2012-01-03 :我們有日期并且它不是假期,然后我們用 0,0 構建兩列。
對于用戶 b:
- 日期 2012-01-01,因為它是假期。然后我們添加兩列 1, 1。
- 日期 2012-01-02 :我們有日期,然后我們用 0,0 構建兩列。
- 日期 2012-01-03:我們沒有日期。然后我們用 2,2 構建兩列。
對于用戶 c:
- 日期 2012-01-01,因為它是假期。然后我們添加兩列 1, 1。
- 日期 2012-01-02 :我們有日期,然后我們用 0,0 構建兩列。
- 日期 2012-01-03 :我們有日期,然后我們用 0,0 構建兩列。
這是我想要的資料框。

我嘗試使用此代碼,但它給了我一個錯誤:
out = (df.reindex(df.index.repeat(2)).assign(col=lambda x: x.groupby('user').\
cumcount()).pivot_table( 'date', 'user', 'col', fill_value=2).add_prefix('val').rename_axis(index=None, columns=None))
uj5u.com熱心網友回復:
You can pivot, fillna, and then unstack twice:
tmp = df.pivot(index='date', columns='user', values='holiday').fillna(2).astype(int).unstack().unstack()
tmp = tmp[tmp.columns.repeat(2)]
# Formatting
tmp = tmp.set_axis(np.arange(tmp.shape[1]) 1, axis=1).add_prefix('val').reset_index()
Output:
user val1 val2 val3 val4 val5 val6
0 a 1 1 2 2 0 0
1 b 1 1 0 0 2 2
2 c 1 1 0 0 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448258.html
