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
A1:是的,使用pivot_table
Q2: How to combine the rows with same Id in to one?
A2:像这样:
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
我有一个这样的数据框
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
A1:是的,使用pivot_table
Q2: How to combine the rows with same Id in to one?
A2:像这样:
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