Pandas: 值到列,然后按相同的 Id 分组和合并

Pandas: Values to columns and then group and merge by same Id

我有一个这样的数据框

df = DataFrame({'Id':[1,2,3,3,4,5,6,6,6],
             'Type': ['T1','T1','T2','T3','T2','T1','T1','T2','T3'],
             'Duration':[5,10,5,7,5,10,15,20,15]})
df
   Id   Type    Duration
0   1   T1      5
1   2   T1      10
2   3   T2      5
3   3   T3      7
4   4   T2      5
5   5   T1      10
6   6   T1      15
7   6   T2      20
8   6   T3      15

我想根据 Type 中的唯一值和 Duration 中的值创建新列,然后为每个 Id

创建一行
col_list = df.Type.unique().tolist()
df[col_list] = nan

def fill_values(duration):
    return duration

for col in col_list:
    df[col] = df['Duration'].loc[df['Type'] == col].apply(fill_values)

Output:
    Id  Type    Duration    T1  T2  T3
0   1   T1      5           5.0 NaN NaN
1   2   T1      10          10.0 NaN NaN
2   3   T2      5           NaN 5.0 NaN
3   3   T3      7           NaN NaN 7.0
4   4   T2      5           NaN 5.0 NaN
5   5   T1      10          10.0 NaN NaN
6   6   T1      15          15.0 NaN NaN
7   6   T2      20          NaN 20.0 NaN
8   6   T3      15          NaN NaN 15.0

Q1:有没有更好的办法

Q2:如何将Id相同的行合并为一个?

预期输出:

   Id   T1  T2  T3
0   1   5   NaN NaN 
1   2   10  NaN NaN 
2   3   NaN 5   7
3   4   NaN 5   NaN 
4   5   10  NaN NaN 
5   6   15  20   15

感谢任何帮助。

Q1: Is there a better way to do this Blockquote

A​​1:是的,使用pivot_table

Q2: How to combine the rows with same Id in to one?

A​​2:像这样:

df = df.pivot_table(index='Id',columns='Type',values='Duration').rename_axis(None, axis=1).reset_index() 



expected result:

    Id  T1     T2      T3
0   1   5.0    NaN     NaN
1   2   10.0   NaN     NaN
2   3   NaN    5.0     7.0
3   4   NaN    5.0     NaN
4   5   10.0   NaN     NaN
5   6   15.0   20.0    15.0