Python:/:'tuple'和'float'

时间:2015-04-28 23:36:52

标签: python pandas

我正在尝试循环并根据我拥有的另一个数据框创建一个新的数据框。假设我有一个像这样的数据框

Foo Fizz Buzz totals scale
10  3    2     15     .2
8   4    3     15     .2 
5   1    5     11     .4
6   7    5     18     .1
9   2    6     17     .1

这是一个分类变量:

groups = pd.Series(['Foo','Fizz','Buzz'], dtype = "category")

我想创建一个新的数据框,它占用总数的百分比并乘以比例。我认为最简单的方法是循环它,这样我就可以使数据框和名称保持一致,但它给我带来了这个错误:

TypeError: unsupported operand type(s) for /: 'tuple' and 'float'

我使用的代码如下。任何帮助将不胜感激(我知道必须有一个更简单的方法)。谢谢!

df = pd.DataFrame() #creating an empty data frame 
for j in Categorical(groups).categories: #looping through categories
    calc = [] #empty list
    for i in range(0, demo.shape[0]): #loop through rows
        #Below is basically the column divided by the total and multiplied by the scale. 
        #Then take that number and append it onto the list                    
        calc.append(round((round(cross.ix[i,j],4)/round(cross.totals[i],4)) * cross.weight[i],4))

        #finally append this list to the dataframe using the categories as the column name using setting with enlargement 
        df.loc[:,Categorical(groups).categories[j]] = calc 

1 个答案:

答案 0 :(得分:3)

round(   (demo.ix[i,j],4) / round(demo.totals[i],4)   )

我已经为您的代码添加了空格以强调发生了什么:您对一个元素tuple demo.ix[i,j]而对另一个元素有4,然后你将tuple除以demo.totals[i]四舍五入到4个位置(一个float),然后你围绕那个...只有你不能绕过那个因为试图划分tuple 1 {}由float给出您看到的错误。请尝试以下方法。

round(demo.ix[i,j],4) / round(demo.totals[i],4)