首页 > 解决方案 > 如何为具有 60 列的数据框编写具有多个条件的“for 循环”?

问题描述

df

对于图像中的 df,我如何找到每列的实例数(例如:151),其中该列的值 <= 0 并且“WS”列的值> 0(“WS”> 0 将与所有其他列 - 151、154、152 为常数“AND”。所以基本上 151 <= 0 和 WS > 0、152 <= 0 和 WS > 0.. 等等。如何为此编写一个for循环?输出需要存储在另一个 df 中,看起来像(只是随机数)-

151 - 2368 152 - 3098 154 - 2301

标签: pythonpandasdataframefor-loop

解决方案


如果要遍历数据框的行,可以使用以下itterrows()方法:

cols = df.columns[:-1] ##[151, 154, 152]
out = pd.Series({c: 0 for c in cols})
for c in cols:
    for index, row in df.iterrows():
        if row[c] <= 0 and row['WS'] > 0:
            out[c] = out[c] + 1

但是,有一种更好的方法可以做到这一点(无需遍历行),方法是在根据以下条件过滤数据帧时检查数据帧的长度:

cols = df.columns[:-1] ##[151, 154, 152]
out = pd.Series()
for c in cols:
    out[c] = len(df[(df[c] <= 0)&(df['WS'] > 0)])

这里cf[c] <= 0给我们一列二进制值,指示列c小于 0 的行。同样df['WS'] > 0,二进制列指示哪些行对 WS 具有正值。(df[c] <= 0)&(df['WS'] > 0)给我们一列,指示两者都为真的行,并通过二进制列切片数据帧,就像df[binary_column]给我们一个仅包含该二进制列为真的行的数据帧。


推荐阅读