【问题标题】:pandas pivoting a dataframe, duplicate rows [duplicate]大熊猫旋转数据框,重复行[重复]
【发布时间】:2012-07-09 03:42:11
【问题描述】:

我在 pandas 中旋转时遇到了一点麻烦。我正在处理的dataframe(日期、位置、数据)看起来像:

dates    location    data
date1       A         X
date2       A         Y
date3       A         Z
date1       B         XX
date2       B         YY

基本上,我试图以位置为中心,最终得到如下数据框:

dates   A    B    C
date1   X    XX   etc...
date2   Y    YY
date3   Z    ZZ 

不幸的是,当我旋转时,与原始日期列等效的索引没有改变,我得到:

dates  A   B   C
date1  X   NA  etc...
date2  Y   NA
date3  Z   NA
date1  NA  XX
date2  NA  YY

有谁知道我可以如何解决此问题以获取我正在寻找的数据帧格式?

我目前正在这样调用 Pivot:

df.pivot(index="dates", columns="location")

因为我有 # 个数据列要转置(不想将每个列都作为参数列出)。我相信默认情况下,pivot 会旋转数据框中的其余列。 谢谢。

【问题讨论】:

标签: python pivot pivot-table pandas


【解决方案1】:

如果您有多个数据列,则在没有值列的情况下调用 pivot 应该会给您一个以 MultiIndex 作为列的旋转框架:

In [3]: df
Out[3]: 
  columns     data1     data2 index
0       a -0.602398 -0.982524     x
1       a  0.880927  0.818551     y
2       b -0.238849  0.766986     z
3       b -1.304346  0.955031     x
4       c -0.094820  0.746046     y
5       c -0.835785  1.123243     z

In [4]: df.pivot('index', 'columns')
Out[4]: 
            data1                         data2                    
columns         a         b         c         a         b         c
index                                                              
x       -0.602398 -1.304346       NaN -0.982524  0.955031       NaN
y        0.880927       NaN -0.094820  0.818551       NaN  0.746046
z             NaN -0.238849 -0.835785       NaN  0.766986  1.123243

【讨论】:

  • 是的,我看到信息以多索引的形式出现,但同样,我遇到了同样的问题,即 pandas 似乎将所有日期都识别为唯一的并且我得到了一堆 Nans。即使我将枢轴参数值设置为 C 列,我仍然会得到与原始表中相同的行数,只是所有重复日期都使用 Nans。
【解决方案2】:

您如何调用 DataFrame.pivot 以及您的日期列是什么数据类型?

假设我有一个类似于你的 DataFrame,日期列包含日期时间对象:

In [52]: df
Out[52]: 
       data                dates loc
0  0.870900  2000-01-01 00:00:00   A
1  0.344999  2000-01-02 00:00:00   A
2  0.001729  2000-01-03 00:00:00   A
3  1.565684  2000-01-01 00:00:00   B
4 -0.851542  2000-01-02 00:00:00   B


In [53]: df.pivot('dates', 'loc', 'data')
Out[53]: 
loc                A         B
dates                         
2000-01-01  0.870900  1.565684
2000-01-02  0.344999 -0.851542
2000-01-03  0.001729       NaN

【讨论】:

  • 我实际上是在没有第三个参数的情况下调用 df.pivot,因为在我的实际数据中,我有 # 个数据列,我想旋转所有这些列。那会是其中的一部分吗?
  • 您的日期列中的实际内容是什么?看起来它们确实被视为彼此独特的价值。
【解决方案3】:

刚刚回答了我自己的问题。我正在使用旧的 Sybase 模块来导入数据,我认为它使用了来自 mxDatetime 的旧 DateTimeType 对象。在该模块中,2011 年 1 月 1 日的日期时间不一定等于 2011 年 1 月 1 日的另一个日期时间(例如,每个日期时间都是唯一的)。因此,数据框枢轴将每个列值视为索引中的唯一值。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2012-07-23
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多