为熊猫数据框中的每个现有变量从行创建新变量

Tho*_*muf 5 python dataframe pandas

我有一个数据框,它看起来像:

0  target_year ID   v1  v2  
1  2000         1  0.3   1
2  2000         2  1.2   4
...
10 2001         1    3   2
11 2001         2    2   2
Run Code Online (Sandbox Code Playgroud)

我想要以下输出:

0   ID   v1_1  v2_1  v1_2  v2_2  
1    1    0.3     1     3     2 
2    2    1.2     4     2     2
Run Code Online (Sandbox Code Playgroud)

你知道怎么做吗?

yat*_*atu 6

您可以使用pd.pivot_table, 使用GroupBy.cumcountofID作为列。

然后我们可以使用列表理解f-stringsMultiIndex标题合并到一个单一级别:

cols = df.groupby('ID').ID.cumcount() + 1
df_piv = (pd.pivot_table(data = df.drop('target_year', axis=1)[['v1','v2']],
                         index = df.ID, 
                         columns = cols)
df_piv.columns = [f'{i}_{j}' for i,j in df_piv.columns]


     v1_1  v1_2  v2_1  v2_2
ID                        
1    0.3   3.0     1     2
2    1.2   2.0     4     2
Run Code Online (Sandbox Code Playgroud)