【问题标题】:Error with Pandas Rank Across Columns Using a Dict使用字典的 Pandas 跨列排名错误
【发布时间】:2018-07-13 19:15:55
【问题描述】:

我曾经使用一段代码使用 dict 对每个类别中的列进行排名。但是使用新的 Pandas/Python3,我收到以下错误:

ValueError: 传递值的形状是 (100, 4),索引意味着 (100, 100)

感谢任何建议或帮助。

下面是代码:

import pandas as pd
import numpy as np
d = dict()
d ={'A': 'Health Care', 'AA': 'Materials', 'B': 'Health Care', 'BB': 'Materials'}
data = pd.DataFrame(np.random.rand(100,4), index=range(0,100), columns=d.keys() )
data.groupby(d , axis = "columns").rank(axis = "columns", pct=True)

【问题讨论】:

    标签: pandas dictionary rank


    【解决方案1】:

    尽管我使用的是 Anaconda 3.6.4 和 Pandas 0.22.0,但我在我的机器上运行了该代码并且运行良好。可能是版本问题。这是正确的输出吗?

    输出:

    d = dict()
    d ={'A': 'Health Care', 'AA': 'Materials', 'B': 'Health Care', 'BB': 'Materials'}
    data = pd.DataFrame(np.random.rand(100,4), index=range(0,100), columns=d.keys() )
    data.groupby(d , axis = "columns").rank(axis = "columns", pct=True)
    
    
    A   AA  B   BB
    0.5 1.0 1.0 0.5
    1.0 0.5 0.5 1.0
    0.5 0.5 1.0 1.0
    0.5 0.5 1.0 1.0
    0.5 1.0 1.0 0.5
    1.0 0.5 0.5 1.0
    1.0 1.0 0.5 0.5
    0.5 1.0 1.0 0.5
    0.5 0.5 1.0 1.0
    1.0 1.0 0.5 0.5
    

    【讨论】:

    • 是的。输出是我正在寻找的。我正在使用熊猫'0.23.0'。我怀疑是版本问题。除了降级之外,关于如何解决它的任何建议?
    • 如果您绝对不想在您拥有的代码中解决此问题,我会尝试卸载 pandas 并重新安装某个版本
    • 我愿意修改代码。只是我不确定我需要如何修复代码。
    • 我讨厌使用 For-Loops,但我认为我必须遍历组并在 For-Loop 的每次迭代中使用 .rank() 函数。
    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 2021-08-04
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多