将数据框转换为所需格式

时间:2018-11-05 15:41:00

标签: python pandas

假设我有一个数据框df1,其列类似于[user_id:字符串,app_name:字符串,频率:浮动]。现在,我想获得一个df2矩阵表示形式Users x Apps,其中每个条目都指示频率。换句话说,df2的列看起来像[user_id,frequency_app_1,frequency_app_2,... frequency_app_n] 另外,当n <1000和n> 10000时,如何处理数据?

由于我不知道该问题的关键字,因此线索也将有所帮助。

假设数据集如下所示

  user_id app_name  frequency
    id001   app4   324.54
    id005   app4   786.56
    id002   app3   87.79
    id002   app4   423.76
    id003   app1   23.34
    id001   app2   34.76
    id001   app1   796.89    
    id004   app6   324.12
    id002   app1   32.34
    id004   app3   124.98
    id003   app1   324.98
    id003   app1   434.5
    id001   app1   89.54
    id001   app4   54.51
    id002   app2   544.87
    id003   app3   76.0
    id002   app1   32.32
    id001   app1   654.56

预期结果应该像

user_id   frequency_app_1   frequency_app_2   frequency_app_3   frequency_app_4   
id001     1629.1                 34.76              N/A                 379.05
...

1 个答案:

答案 0 :(得分:0)

我认为您的示例有一个小问题。有些列的“ user_id”和“ app_name”相同,但“频率”不同。因此,您不能直接使用数据透视,可以先drop_duplicates然后再使用数据透视。

df2 = df.drop_duplicates(subset=["user_id", "app_name"])
df2.pivot(index="user_id", columns="app_name", values="frequency")
# Output
app_name    app1    app2    app3    app4    app6
user_id                 
id001   796.89  34.76   NaN 324.54  NaN
id002   32.34   544.87  87.79   423.76  NaN
id003   23.34   NaN 76.00   NaN NaN
id004   NaN NaN 124.98  NaN 324.12
id005   NaN NaN NaN 786.56  NaN

但是,如果“ user_id”和“ app_name”相同,请确保要使用哪些列。