Pandas If / then else有多个条件

时间:2017-12-06 00:54:50

标签: python pandas data-science case-statement

这是一件非常简单的事情,但是我花了好几个小时试图弄清楚,当我可以在SQL或Tableau中轻松完成此操作时。

想象一下,我有一个ID列和一个Item1和Item2列。在SQL中,我写道:

CASE
WHEN Item1 IS NULL AND Item2 IS NULL
THEN '0'
WHEN Item1 IS NOT NULL AND ITEM2 IS NOT NULL
THEN '2'
WHEN Item1 IS NULL AND Item2 is NOT NULL
THEN '1'
WHEN Item1 IS NOT NULL AND Item2 IS NULL
THEN '1'
END

我有什么想法可以在熊猫中复制这个?为了澄清,这必须是一个新列,其值为0,1或2。

2 个答案:

答案 0 :(得分:2)

听起来你只想在每一行中计算非空条目。

之类的东西
df[['Item 1', 'Item 2']].notnull().sum(axis=1)

应该可以工作:您只需计算每个元素是否为空并按行汇总。如果您想要检测np.isnan()数值,则可能必须使用isnotnull()而不是NaN之类的内容。

然后,您可以按常规方式将此结果分配到DataFrame中的新列。

答案 1 :(得分:0)

将新数据保存在现有列名'item3'中:

<div class="wrap">
  <div class="button-skewed"><a class="button left" href="#"><img src="https://fxfactory.com/downloads/docs/noiseindustries/fxfactorypro/Thumbnails/Stripes.jpg"/><span class="titleleft">title here</span></a><span class="mask mask-outer-left"></span><a class="button right" href="#"><span class="titleright">title here</span></a><span class="mask mask-outer-right"></span></div>
</div>
<br>
<div class="wrap">
  <div class="button-skewed"><a class="button left" href="#"><span class="titleleft">title here</span></a><span class="mask mask-outer-left"></span><a class="button right" href="#"><span class="titleright">title here</span></a><span class="mask mask-outer-right"></span></div>
</div>

更紧凑:

for index, row in df.iterrows():

    if row['item1'] is None and row['item2'] is None:
        df.set_value(index, 'item3', 0)
    elif row['item1'] is None and row['item2'] is not None:
        df.set_value(index, 'item3', 1)
    elif row['item1'] is not None and row['item2'] is None :
        df.set_value(index, 'item3', 2)
    elif row['item1'] is not None and row['item2'] is not None:
        df.set_value(index, 'item3', 1)