【问题标题】:Loop over one column and fill rows in fucntion Pandas Dataframe Python循环一列并在函数 Pandas Dataframe Python 中填充行
【发布时间】:2018-07-09 05:28:48
【问题描述】:

我正在尝试遍历数据框。特别是通过日期列,这意味着对于每个日期,我都会获取该日期的 x、y 和 z 值并将其填充到我定义的函数中。不知何故,我不确定如何正确调用它。我的代码如下所示:

import pandas as pd

def calc_funct(x, y, z):

    func = x*y*z

    return func

if __name__ == '__main__':

    df = pd.read_csv('C:/Data.csv')

    for column in df:

        results = calc_funct(df['x'], df['y'], df['z'])
        print(result)

输入如下所示:

           date   x   y   z
    0  2017-11-11  18  17   7
    1  2017-11-11  16  19   3
    2  2017-11-11  13  14   2
    3  2017-11-11  12  13   1
    4  2017-11-11  11  12   9
    5  2017-11-11  10  11  10
    6  2017-11-11  21  10  11
    7  2017-11-12  13  19  12
    8  2017-11-13  18  17  12
    9  2017-11-14   9  10  20
   10  2017-11-15   2  20  13
   11  2017-11-18  13  13   9
   12  2017-11-19  18  14  16
   13  2017-11-20  14  11  19
   14  2017-11-21  18  15  19

对于日期 2017-11-11,我将计算值(例如,在该日期添加/减去它们的所有值)并将其存储,例如在一个列表中。然后迭代下一个日期 2017-11-12 等...

【问题讨论】:

  • 您的预期输出是什么?您是否想要一个新列,该列给出 DataFrame 每一行的 x、y 和 z 相乘结果?
  • @Ben,非常感谢您的回答。我的输出应该只是每个日期的打印语句,它应该打印根据定义的函数计算的结果。

标签: python pandas loops dataframe


【解决方案1】:

如果您想要所有列 + 作为函数结果的新列,您可以这样做:

df['result'] = calc_funct(df['x'], df['y'], df['z'])

或者只是 dateresult 加上另一行代码:

df = df[['date','result']]

编辑

result = []
for index, row in df.iterrows():
    result.append(row['date'])
    result.append(calc_funct(row['x'], row['y'], row['z']))
print result

【讨论】:

  • 并且输出应该更多地存储在数据框之外。
  • “数据框之外”是什么意思?
  • 只是作为数组中的值供以后处理
  • 我修改了帖子。这样你就有了一个列表
  • 非常感谢。这是正确的方法。但是我怎样才能在输出中包含日期,另外为什么我在输出中多次收到相同的输出?
【解决方案2】:

在 pandas 中,您可以使用 apply 方法。

df.apply(lambda v : calc_funct(v["x"], v["y"], v["z"]), axis=1)

注意axis=1 用于迭代行,axis=0 用于迭代列。

【讨论】:

  • 非常感谢您的回答。如何打印结果如下:日期和结果?
  • 只需添加print : df.apply(lambda v : print(calc_funct(v["x"], v["y"], v["z"])), axis=1)
  • 请注意,您可以将结果添加到原始数据框中:df["result"] = df.apply(lambda v : calc_funct(v["x"], v["y"], v["z"]), axis=1)
猜你喜欢
  • 2019-04-26
  • 1970-01-01
  • 2017-08-18
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 2022-12-22
  • 2014-09-25
  • 2015-02-14
相关资源
最近更新 更多