Python 如何透视数据帧以将多行折叠为一行
我有一个数据框,它有4列:UID、Date、Type和Value本身: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
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%正确的!不应该有重复的密钥,但我忘记了生成数据的过程在前一天意外运行了两次。如果可以的话,我会给你两个复选标记!:)再次感谢!