2014-10-05 69 views
3

我有一个正常的DF如何创建基于2+条件大熊猫迭代而不利用新df.column?

A = pd.DataFrame([[1, 5, 2], [2, 4, 4], [3, 3, 1], [4, 2, 2], [5, 1, 4]], 
        columns=['A', 'B', 'C'], index=[1, 2, 3, 4, 5]) 

如果我想创建一个基于另一个专栏中,我不喜欢这样的条件一栏,并按照预期运行。

In [5]: A['D'] = A['C'] > 2 
In [6]: A 
Out[6]: 
    A B C  D 
1 1 5 2 False 
2 2 4 4 True 
3 3 3 1 False 
4 4 2 2 False 
5 5 1 4 True 

但是,如果我想用2个条件......喜欢做同样的:

A['D'] = A['C'] > 2 and A['B'] > 2  or  A['D'] = A['C'] > 2 & A['B'] > 2 

我得到了臭名昭著的

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

我怎样才能解决不重复?基于两个条件创造这个新列的目的是为了能够使用这种类型的GROUPBY功能:

A.groupby('D').apply(custom_fuction) 

所以,也许有使用GROUPBY做整个事情的方式,但我不”不知道该怎么做。

感谢

回答

1

使用&,不and,执行的elementwise逻辑与操作:

In [40]: A['D'] = (A['C'] > 2) & (A['B'] > 2) 

In [41]: A 
Out[41]: 
    A B C  D 
1 1 5 2 False 
2 2 4 4 True 
3 3 3 1 False 
4 4 2 2 False 
5 5 1 4 False 

你也可以跳过定义D柱:

In [42]: A.groupby((A['C'] > 2) & (A['B'] > 2)) 
Out[42]: <pandas.core.groupby.DataFrameGroupBy object at 0xab5b6ac> 
+0

我感到羞愧。 – hernanavella 2014-10-05 14:57:01

+1

不,不要。我们都在这里学习。 – unutbu 2014-10-05 14:57:30