在数据帧列表上应用操作

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)

我怎么能做到这一点?提前致谢.

cs9*_*s95 5

使用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)