Python 如何透视数据帧以将多行折叠为一行

Python 如何透视数据帧以将多行折叠为一行,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,它有4列:UID、Date、Type和Value本身: UID Date Type Value 50 2020-12-01 3 15 50 2020-12-01 2 13 50 2020-12-01 1 50 135 2020-12-02 2 0 135 2020-12-02 1 12 50 2020-12-02 4 100 50 2020-12-02 2

我有一个数据框,它有4列:UID、Date、Type和Value本身:

UID Date        Type    Value
50  2020-12-01  3       15
50  2020-12-01  2       13
50  2020-12-01  1       50
135 2020-12-02  2       0
135 2020-12-02  1       12
50  2020-12-02  4       100
50  2020-12-02  2       25
50  2020-12-02  3       15  
50  2020-12-02  1       40
对于给定日期的给定用户,显示的每种类型都是唯一的(即在Z天,UID Y的X类型永远不会有两个条目)。类型是介于1和4之间的整数(包括1和4)

我想将其转换为一个数据帧,每个类型都有一列,对应列中有一个值,并将所有行缩减为具有唯一的UID/日期对,缺少的类型/值对为nan或0:

UID Date        Type_1  Type_2  Type_3  Type_4
50  2020-12-01  50      13      15      nan
135 2020-12-02  12      0       nan     nan
50  2020-12-02  40      25      15      100
我一直在修补pivot,但不能完全得到它,任何帮助都将不胜感激

这很简单

df.pivot(index = ['UID','Date'], values = 'Value', columns = 'Type').add_prefix('Type_')
输出

    Type        Type_1  Type_2  Type_3  Type_4
UID Date                
50  2020-12-01  50.0    13.0    15.0    NaN
    2020-12-02  40.0    25.0    15.0    100.0
135 2020-12-02  12.0    0.0     NaN     NaN

如果您不喜欢索引中的那些列,可以将
reset_index()
粘贴在表达式的末尾

。在我的实际数据上,它搅动了一段时间,然后出现了“传递值的长度是X,索引意味着Y”的错误,其中X是表中的行数,Y是我为索引放置的列数。我确实用pivot_表替换了pivot_表,但它似乎有效!可能实际的数据帧有重复的键(UID,Date)。。但很高兴您能够使用pivot_table——这是一个更好的函数(我认为),您是100%正确的!不应该有重复的密钥,但我忘记了生成数据的过程在前一天意外运行了两次。如果可以的话,我会给你两个复选标记!:)再次感谢!