我的表:
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
如果B
和C
都不存在,则显示not there
其他present
如果有D
和E
的人不在,则显示not there
其他present
如果任何人F
和G
不等于0
present
其他not there
如果H
和I
总和大于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中我可以完成我的新数据框。
答案 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