【问题标题】:How to multiply two columns together with a condition applied to one of the columns in pandas python?python - 如何将两列与应用于pandas python中一列的条件相乘?
【发布时间】:2022-01-15 11:43:09
【问题描述】:

以下是一些示例数据:

data = {'Company': ['A', 'B', 'C', 'D', 'E', 'F'],
        'Value': [18700, 26000, 44500, 32250, 15200, 36000],
        'Change': [0.012, -0.025, -0.055, 0.06, 0.035, -0.034]
       }
df = pd.DataFrame(data, columns = ['Company', 'Value', 'Change'])
df

Company Value   Change
0   A   18700   0.012
1   B   26000   -0.025
2   C   44500   -0.055
3   D   32250   0.060
4   E   15200   0.035
5   F   36000   -0.034

我想创建一个名为“新值”的新列。此列的逻辑与每一行的以下几行类似:

  • 如果变化 > 0,则值 + (值 * 变化)
  • 如果 Change

我尝试使用以下循环创建一个列表并将其作为新列添加到 df,但是当我预计只有 5 个(对应于 df 中的行数)时,返回的值比预期的要多。

lst = []

for x in df['Change']:
    for y in df['Value']:
        if x > 0:
            lst.append(y + (y*x))
        elif x < 0:
            lst.append(y - (y*(abs(x))))
print(lst)

如果有人能指出我哪里出错了,或者建议一种替代方法,那就太好了:)

【问题讨论】:

  • if Change Value - (Value * (abs(Change)) ) 这不就是Value + Value*Change吗?所以df['Value'] * (1 + df['Change'])?还是你的意思是上一行的Change
  • 不需要条件;鉴于 Change 的符号,这两个表达式是相同的(使用第一个)
  • 是的,你们都是正确的——我的错误????

标签: python pandas dataframe loops dataset


【解决方案1】:

您的两个条件实际上是相同的,所以您只需要这样做:

df['New Value'] = df['Value'] + df['Value'] * df['Change']

输出:

>>> df
  Company  Value  Change  New Value
0       A  18700   0.012    18924.4
1       B  26000  -0.025    25350.0
2       C  44500  -0.055    42052.5
3       D  32250   0.060    34185.0
4       E  15200   0.035    15732.0
5       F  36000  -0.034    34776.0

或者,稍微简洁一点:

df['New Value'] = df['Value'] * df['Change'].add(1)

或者

df['New Value'] = df['Value'].mul(df['Change'].add(1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2022-01-25
    相关资源
    最近更新 更多