大熊猫除以多列条目

时间:2014-08-19 23:25:37

标签: python pandas merge dataframe concat

熊猫新手。想知道如何划分由多列分组的数据框?我想得到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:两个MultiIndex对象之间的连接是不明确的

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

如果我尝试连接,我会收到此错误: TypeError:第一个参数必须是类似于pandas对象的列表,你传递了一个类型为“Series”的对象

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

不确定你是如何做到的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