【问题标题】:How to iterate over column values to create transformed variables in Python?如何迭代列值以在 Python 中创建转换后的变量?
【发布时间】:2021-02-18 06:16:56
【问题描述】:

我有 10 列,我必须创建新的 10 列的原始列。如何在 Python 中做到这一点?我已经尝试使用 for 循环,但它给了我一个错误?

我的数据框是

d = {'col1': [0, 15, 30, 45, 60], 'col2': [0, 60, 180, 240, 300]}
df = pd.DataFrame(data=d)

我创建了一个函数transform,但是如何使用var 指定所有列?我在以下命令中遇到错误。

df = df.pipe(transform, var=[0, 60])

样本输出:

   col1_sin  col2_sin  col1_cos  col2_cos
0  0.000000  0.304811  1.000000 -0.952413
1  0.650288  0.000000 -0.759688  1.000000
2 -0.988032  0.580611  0.154251  0.814181
3  0.850904 -0.801153  0.525322 -0.598460
4 -0.304811  0.945445 -0.952413  0.325781

【问题讨论】:

  • columns 是什么意思?你有pandas 数据框吗?如果是,请提供具有预期输出的示例输入数据框以及您尝试解决的方法。
  • 请根据您提供的示例输入发布预期输出。

标签: python pandas for-loop transform


【解决方案1】:

你没有提供你的功能正在做什么。从推理 sin()cos()

下面显示了pipe() 如何与参数一起使用。在这种情况下,您希望将函数应用于数据框中的所有列。

import math

d = {'col1': [0, 15, 30, 45, 60], 'col2': [0, 60, 180, 240, 300]}
df = pd.DataFrame(data=d)

def pipefoo(dfa, ops=[math.sin]):
    return dfa.assign(**{f"{c}_{f.__name__}":dfa[c].apply(f) for f in ops for c in dfa.columns})

df.pipe(pipefoo, ops=[math.sin,math.cos])

col1 col2 col1_sin col2_sin col1_cos col2_cos
0 0 0 0 0 1 1
1 15 60 0.650288 -0.304811 -0.759688 -0.952413
2 30 180 -0.988032 -0.801153 0.154251 -0.59846
3 45 240 0.850904 0.945445 0.525322 0.325781
4 60 300 -0.304811 -0.999756 -0.952413 -0.0220966

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2012-12-24
    相关资源
    最近更新 更多