Zan*_*hin 0 python dataframe pandas
从这个问题中选择只有一个我正在尝试使用的负值的列,并将解决方案更改为数据框列表,然后选择符合条件的数据框.虽然不能使它工作.
在下面的示例中,我想返回"Z"列中只有一个或更少负值的数据帧.
在这种情况下df1.
例;
N = 5
np.random.seed(0)
df1 = pd.DataFrame(
{'X':np.random.uniform(-3,3,N),
'Y':np.random.uniform(-3,3,N),
'Z':np.random.uniform(-3,3,N),
})
df2 = pd.DataFrame(
{'X':np.random.uniform(-3,3,N),
'Y':np.random.uniform(-3,3,N),
'Z':np.random.uniform(-3,3,N),
})
X Y Z
0 0.292881 0.875365 1.750350
1 1.291136 -0.374477 0.173370
2 0.616580 2.350638 0.408267
3 0.269299 2.781977 2.553580
4 -0.458071 -0.699351 -2.573784
----------------
X Y Z
0 -2.477224 2.871710 0.839526
1 -2.878690 1.794951 -2.139880
2 1.995719 -0.231124 2.668014
3 1.668941 1.683175 0.131090
4 2.220073 -2.290353 -0.512028
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?提前致谢.
使用sum和只计算0以下的项目数yield.
def foo(df_list):
for df in df_list:
if (df['Z'] < 0).sum(0) <= 1:
yield df
Run Code Online (Sandbox Code Playgroud)
df_list = [df1, df2]
for df in foo(df_list):
print(df)
X Y Z
0 0.292881 0.875365 1.750350
1 1.291136 -0.374477 0.173370
2 0.616580 2.350638 0.408267
3 0.269299 2.781977 2.553580
4 -0.458071 -0.699351 -2.573784
Run Code Online (Sandbox Code Playgroud)