【问题标题】:Python - Pandas - Converting column with specific subsets into rowsPython - Pandas - 将具有特定子集的列转换为行
【发布时间】:2018-04-24 16:24:40
【问题描述】:

我有一个如下所示的数据框,其中包含日期、价格和序列号。

+----------+--------+--------+
|   Date   | Price  | Serial |
+----------+--------+--------+
| 2/1/1996 | 0.5909 |      1 |
| 2/1/1996 | 0.5711 |      2 |
| 2/1/1996 | 0.5845 |      3 |
| 3/1/1996 | 0.5874 |      1 |
| 3/1/1996 | 0.5695 |      2 |
| 3/1/1996 |  0.584 |      3 |
+----------+--------+--------+

我想让它看起来像这样,其中序列号成为列名,数据将自己排序到正确的日期行和序列号列中。

+----------+--------+--------+--------+
|   Date   |   1    |   2    |   3    |
+----------+--------+--------+--------+
| 2/1/1996 | 0.5909 | 0.5711 | 0.5845 |
| 3/1/1996 | 0.5874 | 0.5695 |  0.584 |
+----------+--------+--------+--------+

我知道我可以通过循环来做到这一点,但只是想知道是否有更有效的方法来做到这一点?

感谢您的热心帮助。也很好奇是否有更好的方法来粘贴这些表格而不是在我的问题中附加图像=x

【问题讨论】:

  • 请在问题正文中添加图片!
  • 邮政编码/文本不是代码或文本的图像。

标签: python pandas dataframe


【解决方案1】:

你可以使用pandas.pivot_table:

res = df.pivot_table(index='Date', columns='Serial', values='Price', aggfunc=np.sum)\
        .reset_index()

res.columns.name = ''

       Date       1       2       3
0  2/1/1996  0.5909  0.5711  0.5845
1  3/1/1996  0.5874  0.5695  0.5840

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多