【问题标题】:Create Formula Based on Dynamically Changing Columns to Set Values in Pandas Dataframe Column创建基于动态更改列的公式以在 Pandas Dataframe 列中设置值
【发布时间】:2016-06-19 11:26:46
【问题描述】:

我希望在 pandas 数据框中创建一个列,它是列名的变量/动态列表的函数。

典型的列创建是:

df['new']=(df['one']*x)+(df['two']*y)+(df['3']*z)

其中 x,y,z 是来自另一个 df 的变量。

x 1.1
y 1.2
z 1.3
a 1.4
b 1.5
c 1.6

我想创建一个列,该列将是列的变量列表的函数。

例如,如果:

cols=['one','two']

那么公式将被创建为:

df['new']=(df['one']*x)+(df['two']*y)

但如果 cols 更改为:

cols=['one','two','three','four']

那么公式将变为:

df['new']=(df['one']*x)+(df['two']*y)+(df['3']*z)+(df['four']*a)

我知道我在这里一定遗漏了一些简单的东西。

【问题讨论】:

标签: python pandas dynamic dataframe formula


【解决方案1】:

使用 zip 将返回截断的对,因此 [(a, b) for a, b in zip([1, 2], [3, 4, 5, 6])] 将返回返回 [(1, 3), (2, 4)]

df = pd.DataFrame(np.random.randn(5, 5), columns=list('ABCDE'))

x = 1.1
y = 1.2
z = 1.3
a = 1.4
b = 1.5
c = 1.6

var = [x, y, z, a, b, c]
cols = ['A', 'B', 'C']

>>> sum(df[col] * v for col, v in zip(cols, var))
0    0.729284
1    2.671124
2    1.804285
3    0.791489
4    1.818327
dtype: float64

【讨论】:

  • 生成器表达式可以用广播代替:(df[cols] * var[:len(cols)]).sum(axis=1) 也可以。
  • 完美,谢谢!万票。还要感谢 MaxU,很抱歉编辑。
  • @clg4,检查 unutbu 的评论 - IMO 它将更快地工作
【解决方案2】:

试试这个:

cols=['one', 'two']
df['new'] = df[cols].sum(axis=1)

【讨论】:

  • 我认为您可能正在做某事。我可以将它与我编辑的更改一起使用,添加另一个变量的乘法吗?
  • @clg4,抱歉我没听懂你的问题……你能举个例子吗?
  • 同样的问题,我只想将变量列乘以另一个变量,因此等式将是:df['new']=(df['one']*x)+(df['二']*y)+(df['3']*z)+(df['四']*a)
  • @clg4,在您上次的编辑中,您已经完全改变了原来的问题,所以我的回答不再适用。请在以后将其标记为更新并将其添加到原始问题中。
  • @clg4,查看 Alexander 的解决方案
猜你喜欢
  • 2016-02-10
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
相关资源
最近更新 更多