【问题标题】:for loop to create a new column containing the mean of specific columns and generating a "missing values" message where NaNfor 循环创建一个新列,其中包含特定列的平均值并生成“缺失值”消息,其中 NaN
【发布时间】:2020-07-16 23:42:59
【问题描述】:

我对python非常陌生,所以提前道歉,我已经尝试解决这个问题好几个小时了。

我有一组这样的数据,但要大得多:

  A   B   C   D   
1 23  16  NaN 14
2 26  17  23  23
3 23  NaN 22  25
4 24  34  28  28

我需要为该特定行创建另一列 (E),以获取特定列(例如 B、C 和 D)的平均分数。

如果在这一行中存在任何缺失值 (NaN),那么我需要在 E 行中显示“缺失数据”来代替平均分数的位置。

我尝试将 NaN 输出更改为 0(这很成功),然后运行类似于以下内容的内容(我的代码变得一团糟,我忘记了从哪里开始或尝试了什么):

composite = []
for df in column ["A","B","C"]:
    if value > 0:
        composite.append(df[:, ["A","B","C"]].mean(axis=1))
    else:
        composite.append("missing value(s)")

df["composite"] = composite
print(df)

我知道这里的代码可能有很多错误,但它是我正在尝试做的粗略结构。

我还尝试了所有可以在 google 上找到的方法,包括其他技术,例如 .loc 函数。我不想寻求帮助,因为通常我相信我可以使用以前发布的问题自己找到解决方案,但在这种情况下,尽管花费数小时通过谷歌梳理,我仍然无法完成任何工作。

任何帮助将不胜感激。我还被告知我必须使用 for 循环。此外,如果这可以在不将 NaN 值更改为 0 的情况下完成,那将是更可取的。

感谢您的任何意见。

【问题讨论】:

  • df['E'] = df[['B', 'C', 'D']].mean() 应该让你开始。此外,如果你被告知必须使用 for 循环;回到那个源头,断然地说,在 pandas 中使用 for 循环是一个糟糕且低效的想法。
  • 你的代码对我不起作用
  • 如果您不介意,请将您的预期输出作为数据框发布。将您想要的内容与视觉效果联系起来要容易得多。

标签: python pandas for-loop


【解决方案1】:

我相信你可能会尝试这样的事情:

# Create column E with missing values
df["E"] = "missing values"

for idx, row in df.iterrows():
    # Try to convert your values as foat, in case any of them is NaN it will thow
    # an exception and pass
    try:
        B = float(df.iloc[idx,"B"])
        C = float(df.iloc[idx,"C"])
        D = float(df.iloc[idx,"D"])
        df.iloc[idx,"E"] = (B + C + D)/3  # Calculate the mean value and place it on E
    except:
        pass    

【讨论】:

  • 我将您的代码应用到我的 df 并出现语法错误:无法分配给df.iloc(idx,"E") = (B + C + D)/3 行上的函数单元格。
  • 是的,抱歉,我刚刚注意到我的错误。让我改变它
  • 完成!请再次检查
猜你喜欢
  • 1970-01-01
  • 2021-08-12
  • 2020-09-10
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多