【问题标题】:Pandas dividing by multiple column entriesPandas 除以多个列条目
【发布时间】:2014-10-13 05:04:14
【问题描述】:

熊猫新手。想知道如何用由多列分组的数据框进行划分?我想获得 var3(通过某种条件)'var1'和'var2'的比例。可以将这个问题想象为计算在正常工作时间和职业中花费的工作时间百分比。 Var 3 是按天和职业分组的工作时间(以 df2 的正常工作时间为条件)

df = pd.DataFrame(data) ###all data, here all time 
df2 = df[(df['hours'] > x)] ### subset, here all time during normal business hours

df = df.groupby(["var1", "var2"]).var3.sum()
df2 = df2.groupby(["var1", "var2"]).var3.sum()
normal_bus_hours_percent = (df2.div(df, level=['var1', 'var2']) * 100)
这失败了 TypeError: Join on level between two MultiIndex objects is ambiguous

即使您可以帮我合并这些数据框。我收到此错误: AttributeError:“系列”对象没有属性“列”

如果我尝试连接,我会收到以下错误: TypeError: first argument must be a list-like of pandas objects, you pass a object of type "Series"

我来自 R,所以我习惯了简单的 cbind 或合并。

【问题讨论】:

  • 你使用的是哪个版本的熊猫?

标签: python pandas merge dataframe concat


【解决方案1】:

Pandas 默认在索引上对齐,这不起作用吗?

 normal_bus_hours_percent = (df2.div(df) * 100)

【讨论】:

    【解决方案2】:

    不确定你是如何做到的groupby。这看起来怎么样?

    df1 = pandas.DataFrame([
        ['Atlanta', 'A', 1],
        ['Atlanta', 'A', 2],
        ['Atlanta', 'B', 3],
        ['Atlanta', 'B', 13],
        ['Boston', 'A', 4],
        ['Boston', 'A', 14],
        ['Boston', 'B', 5],
        ['Boston', 'B', 16],
        ['Portland', 'A', 7],
        ['Portland', 'A', 1],
        ['Portland', 'B', 9],
        ['Portland', 'B', 9],
        ['Seattle', 'B', 8],
        ['Seattle', 'B', 7],
        ['Seattle', 'C', 2],
        ['Seattle', 'C', 8],
    ], columns=['vars1', 'vars2', 'hours'])
    
    df2 = df1[df1['hours'] > 6]
    
    df1g = df1.groupby(by=['vars1', 'vars2']).sum()
    df2g = df2.groupby(by=['vars1', 'vars2']).sum()
    
    df2g.div(df1g).fillna(0)
    

    产量:

                       hours
    vars1    vars2          
    Atlanta  A      0.000000
             B      0.812500
    Boston   A      0.777778
             B      0.761905
    Portland A      0.875000
             B      1.000000
    Seattle  B      1.000000
             C      0.800000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-13
      • 2018-12-10
      • 1970-01-01
      • 2021-03-02
      • 2021-04-23
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多