熊猫:if-else没有处理专栏

时间:2016-07-08 17:37:06

标签: python pandas dataframe

我想定义一个列,如果另一列中包含的日期等于某个数据,我想在其中放置1或0。

DF[['column_i']]= 0 if DF[['column_j']] == '1983-11-08' else 1

似乎操作未单义定义,因为它返回错误:

Traceback (most recent call last):   File "<pyshell#150>", line 1, in
<module>
    Accounts_conFatt_SR_TRAFF[['Churn']]= 0 if Accounts_conFatt_SR_TRAFF[['Deactive Date']] == '1970-01-01' else 1  
File "C:\Program
Files\Anaconda\lib\site-packages\pandas\core\generic.py", line 887, in
__nonzero__
    .format(self.__class__.__name__)) ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or
a.all().

这是一个错误还是我做错了什么?

ps =类型没有问题:我已经尝试在单个DF [&#39;列&#39;] [0]值上执行if,但效果很好。

2 个答案:

答案 0 :(得分:2)

您可以使用numpy.where声明执行此类操作:

df['column_i'] = np.where(df['column_j'] == '1983-11-08', 0, 1)

答案 1 :(得分:1)

在这种特殊情况下(当你需要零或一个时)你可以这样做:

DF[['column_i']] = (DF[['column_j']] != '1983-11-08').astype(np.int8)

使用TrueFalse值在Python内部表示为10的事实。

PS但来自@reptilicus的解决方案更为通用,因为您可以将任何值放在不仅为零或一个。