【问题标题】:pandas converting single row into column熊猫将单行转换为列
【发布时间】:2019-04-12 22:00:50
【问题描述】:

我正在尝试将单个列转换为行并将该行的相应值获取到其列中。

我尝试使用数据透视表,但它给了我所有其他没有特定对应值的列的空值,但它不希望数据框中出现 NaN。

我有以下数据框df:

week          value            
1       1234
1       5678
1       9856
1       5486
1       4569
2       1234
2       5869
2       4865
2       5589

我试过了

df1 = df.pivot(columns='week',values='value') 

此代码返回带有NaN的数据框,我想消除所有NaN并获取每周的值。结果如下所示。我已经添加了预期输出和实际输出。

预期结果是:

1       2
1234   1234   
5678   5869
9856   4865
5486   5589
4569   NaN

实际结果是

1       2
1234   NaN
5678   NaN
9856   NaN
5486   NaN
4569   1234   
NaN     5869
NaN     4865
NaN     5589

我想删除 NaN 并对齐属于该特定周的值。

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    不是最干净的方式,但这可以完成工作:

    df = pd.DataFrame({'week':[1]*4 + [2]*5 + [3]*7, 'value':np.arange(16)})
    
    df.groupby('week').value.apply(list).apply(pd.Series).T
    

    输出:

    +------+-----+-----+------+
    | week |  1  |  2  |  3   |
    +------+-----+-----+------+
    |    0 | 0.0 | 4.0 | 9.0  |
    |    1 | 1.0 | 5.0 | 10.0 |
    |    2 | 2.0 | 6.0 | 11.0 |
    |    3 | 3.0 | 7.0 | 12.0 |
    |    4 | NaN | 8.0 | 13.0 |
    |    5 | NaN | NaN | 14.0 |
    |    6 | NaN | NaN | 15.0 |
    +------+-----+-----+------+
    

    【讨论】:

    • 谢谢。周不只是 1 和 2,它们是多个。此外,x1、x2 的值不仅仅是 4,它们可能每周都不同。第 1 周可能有 1000 个值,第 2 周可能有 500 个值,依此类推
    • 它仍然有效,将在第 2 周用 NaN 填充缺失的 500 个值。详情见编辑:
    • 谢谢。我指的是这些值不是数字序列,它们是随机的。我已经相应地编辑了数据框。谢谢
    • 仍然是第 1 周和第 2 周都有 4,如果像上面所说的第 1 周有 1000 和第 2 周有 500,你期望什么?
    • 这只是一个参考,我们不知道对应于几周的值的数量。如果您看到主数据框 week1 有四个值,但在实际数据框中它有近 1000 个值,我们不知道这个数字。我们只是将那一周作为一个列,并列出该周 1 下的所有值,并列出第 2 周的所有值,依此类推。谢谢。
    猜你喜欢
    • 2021-08-08
    • 1970-01-01
    • 2019-07-14
    • 2019-05-22
    • 2022-12-18
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多