【问题标题】:How to Get a Boolean from Another Table in Pandas如何从 Pandas 的另一个表中获取布尔值
【发布时间】:2020-07-10 06:08:09
【问题描述】:

我正在尝试根据另一列的中值获取一个值,我正在尝试两种不同的方法,其中一种产生结果,另一种则没有。你能告诉我这两个代码有什么区别吗?

代码1:

med = df2['% Renewable'].median()

for x in df2['% Renewable']:
    if med >= x:
        df2['median'] = 0
    else:
        df2['median'] = 1

代码 2:

df2['median1'] = [1 if x>=med else 0 for x in df2['% Renewable']]

【问题讨论】:

  • 在第一个代码中,您将 df2['median'] 设置为 1 或 0(重复)。在第二个代码中,您将其设置为一系列值。
  • 在第一种情况下,尽管对值进行了迭代,但分配会分配 整个 列,因此您将根据最后一个值为所有内容分配 1 或零

标签: python-3.x pandas pandas-groupby pandas-datareader


【解决方案1】:

使用Series.ltSeries.astype

df2['median'] = df2['% Renewable'].ge(df2['% Renewable'].median()).astype(int)

替代方案:

df2['median'] = np.where(df2['% Renewable'].ge(df2['% Renewable'].median()), 1, 0)

您的错误

您的问题是,在每次迭代中都会修改您的df2['median'] serie 的值。但是要完成这个任务你不需要使用循环,这里不建议使用循环,因为问题是不必要的并且会减慢代码速度

for x in df2['% Renewable']:
    if med >= x:
        df2['median'] = 0
    else:
        df2['median'] = 1

这里分配给整个系列的值仅取决于系列的最后一个值(循环结束的值)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多