【问题标题】:How to write 'for loop' with multiple conditions for a dataframe with 60 columns? [closed]如何为具有 60 列的数据框编写具有多个条件的“for 循环”? [关闭]
【发布时间】:2023-03-25 13:35:02
【问题描述】:

df

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

151 - 2368 152 - 3098 154 - 2301

【问题讨论】:

  • 您能否将数据框包含在问题中,而不是作为其图像的链接?
  • 请从intro tour 重复on topichow to ask。 “告诉我如何解决这个编码问题?”与 Stack Overflow 无关。您必须诚实地尝试解决方案,然后就您的实施提出具体问题。尤其不接受站外链接和文字图片。
  • df= {151: [-0.1, -0.3, 3, 7 ], 152: [-3, -5, 14, -0.1], 'WS': [0, 3, 0 , 5] } 一些值,有 22k 行和 60 个其他列,如 152 和 151。

标签: python pandas dataframe for-loop


【解决方案1】:

如果要遍历数据框的行,可以使用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] &lt;= 0 为我们提供了一列二进制值,指示其中列c 小于0 的行。同样df['WS'] &gt; 0 是一个二进制列,指示哪些行对WS 具有正值。 (df[c] &lt;= 0)&amp;(df['WS'] &gt; 0) 为我们提供了一个列,指示两者都为真的行,并通过像 df[binary_column] 这样的二进制列对数据帧进行切片,为我们提供了一个仅包含该二进制列为真的行的数据帧。

【讨论】:

  • Thabnks Jaob! :)
猜你喜欢
  • 1970-01-01
  • 2023-01-29
  • 2020-08-21
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 2017-03-13
  • 2019-10-10
  • 2017-05-26
相关资源
最近更新 更多