【问题标题】:Python Pandas: combine 2 dataframes, one frame's column as the final result's indexPython Pandas:组合 2 个数据帧,一帧的列作为最终结果的索引
【发布时间】:2014-02-27 08:37:12
【问题描述】:

数据帧 df1:

+--------+------+--------+
| userId | isbn | rating |
+--------+------+--------+
|      1 | 0001 |      3 |
|      2 | 0002 |      4 |
|      2 | 0003 |      5 |
+--------+------+--------+

数据帧 df2:

+------+-------+
| isbn | title |
+------+-------+
| 0001 | aaa   |
| 0002 | bbb   |
| 0003 | ccc   |
+------+-------+

我可以将它们合并到:

+-----+-----+-----+
|     |  1  |  2  |
+-----+-----+-----+
| aaa | 3   | NAN |
| bbb | NAN | 4   |
| ccc | NAN | 5   |
+-----+-----+-----+

列是userId,索引是titleisbn 在合并后被删除。

谢谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    一旦你merge这些框架,你就可以使用pivot_table

    In [11]: merged = df.merge(df2)
    
    In [12]: merged
    Out[12]:
       userId  isbn  rating title
    0       1     1       3   aaa
    1       2     2       4   bbb
    2       2     3       5   ccc
    
    In [13]: merged.pivot_table('rating', 'title', 'userId')
    Out[13]:
    userId   1   2
    title
    aaa      3 NaN
    bbb    NaN   4
    ccc    NaN   5
    

    【讨论】:

    • 谢谢,它有效!但是当 DataFrame 非常大时,这个 pivot_table 方法的性能好吗?我有一个 100 万行的表,5 分钟后它仍在运行......
    • @EricZhang 可能是您正在制作一个稀疏的 DataFrame,因此浪费了很多空间(NaN 放入内存中)。它应该“快速”运行......也许它太大而无法放入内存? :S 我的猜测是你可以使用 groupby 来实现你的最终目标(可能值得问另一个关于你的最终目标是什么的问题 - 你希望通过这个实现什么)?
    • 数据很少,但我确实需要它们。我将首先尝试应用一小组数据。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多