如何比较两列并创建新的数据帧

时间:2015-10-14 10:18:56

标签: python-2.7 pandas

我的表:

    A           B           C           D           E           F           G           H           I
0   0.292090    0.806958    0.255845    0.855154    0.590744    0.937458    0.192190    0.548974    0.703214
1   0.094978    NaN         NaN         NAN         0.350109    0.635469    0.025525    0.108062    0.510891
2   0.918005    0.568802    0.041519    NaN         NaN         0.882552    0.086663    0.908168    0.221058
3   0.882920    0.230281    0.172843    0.948232    0.560853    NaN         NaN         0.664388    0.393678
4   0.086579    0.819807    0.712273    0.769890    0.448730    0.853134    0.508932    0.630004    0.579961

输出:

A          B&C         D&E         F&G         H&I
0.292090   Present     Present     Present     Present
0.094978   Not There   Not There   Present     Present
0.918005   Present     Not There   Present     Present
0.882920   Present     Present     Not There   Present
0.086579   Present     Present     Present     Present

如果BC都不存在,则显示not there其他present

如果有DE的人不在,则显示not there其他present

如果任何人FG不等于0 present其他not there

如果HI总和大于2,则显示not there其他present

我想写函数或lambda pandas中的任何快速,我想生成一个新的数据帧,因为我给出了一个输出。但是我无法理解我应该如何在熊猫中写下这些语句。

if (B & C):
   df.at[0, 'B&C'] = 'Present'
elif
   df.at[0, 'B&C'] = 'Not there'

if (D | E):
   df.at[0, 'D&E'] = 'Present'
elif
   df.at[0, 'D&E'] = 'Not there'

无论如何,在pandas中我可以完成我的新数据框。

2 个答案:

答案 0 :(得分:0)

在这里,您需要选择两列,并且需要检查具有" NAN"的相应条目。或不。在Pandas中,对于所有类型的索引和数据框选择都有一站式解决方案。

  

http://pandas.pydata.org/pandas-docs/stable/indexing.html

我已经使用iloc解释了这一点,但你可以通过许多其他方式来解决这个问题。我没有运行下面的代码,但我希望逻辑清晰。

 def tmp(col1,col2):
        df = data[[col1,col2]]
        for i in range(df.shape[0]):
            if(df.iloc[i,0] == np.nan or df.iloc[i,1] == np.nan):
                df.iloc[i,2]="Not Present"
            else:
                df.iloc[i,2]="Present"

答案 1 :(得分:0)

您可以使用isnull来确定哪些条目为NaN

In [3]: df
Out[3]: 
          A         B         C         D         E
0 -0.600684 -0.112947 -0.081186 -0.012543  1.951430
1 -1.198891       NaN       NaN       NaN  1.196819
2 -0.342050  0.971968 -1.097107       NaN       NaN
3 -0.908169  0.095141 -1.029277  1.533454  0.171399

In [4]: df.B.isnull()
Out[4]: 
0    False
1     True
2    False
3    False
Name: B, dtype: bool

使用&|运算符组合两个布尔Series,并使用numpy中的where函数根据{{1}在两个值之间进行选择布尔人。它返回一个numpy数组,但您可以将其分配给Series

的列
DataFrame