2016-02-25 99 views
0

我一直在尝试使用iterrows,并且没有使用if/else语句从DataFrame列返回计算值。我开始认为这是一种错误的方法。熊猫:使用iterrows返回计算值

在这个例子中我有两个变量xy,和一个数据帧:

category number 
0 one   13 
1 two   14 
2 one   7 
3 three  8 
4 one   3 
5 two   8 
6 four  9 

如果类别是一个或两个,除以2相应的数字和半值分配给变量x和半到变量y。但是,如果类别为三或四,则将整个相应编号分配给变量y。然后xy将求和结果,如:

x = 22.5
(因为:13/2 + 14/2 + 7/2 + 3/2 + 8/2 = 22.5)

y = 39.5
(因为:13/2 + 14/2 + 7/2 + 8 + 3/2 + 8/2 + 9 = 39.5)

我还没有发现在使用这样的iterrows任何例子。这些类型的计算甚至可能使用iterrows还是有更好的方法?

回答

1

您可以使用.loc来查看您正在查看的每种情况,然后根据情况进行汇总。

case1 = ['one', 'two'] 
case2 = ['three', 'four'] 
x = df.loc[df.category.isin(case1), 'number'].sum()/2 
y = x + df.loc[df.category.isin(case2), 'number'].sum() 
+0

这工作完美。从未考虑过将'isin'与'loc'结合起来 - 这种强大的组合。谢谢。 – RDJ