【问题标题】:How to customize function call order on a specific pandas dataframe column?如何自定义特定熊猫数据框列的函数调用顺序?
【发布时间】:2020-04-06 08:53:58
【问题描述】:

我有一个自定义函数列表:

Func =[{'func':'push','col':'A'},{'func':'pull','col':'B'}]
def push : #do something
def pull : #do something

我的数据框:

id  A   B
1  23  24
2  99  88

我希望根据上面提到的列表“Func”,按照列表中给出的特定顺序对该数据帧进行操作。 即,首先在 columnA 上调用函数“Push”,获取该输出数据帧,然后在新数据帧上调用函数“Pull”。

【问题讨论】:

  • 您的问题是什么? push/pull的body如何实现?或者如何引用和调用它们?
  • 如何引用和调用它们

标签: python pandas list dataframe dictionary


【解决方案1】:

由于函数是 python 中的一等公民,您可以将它们作为值放在 dict 中,

然后只需迭代您的列表并在所需列上调用函数:

编辑:现在使用 exec 将函数名称作为字符串(请参阅 OP 评论)

import pandas as pd

df = pd.DataFrame({"A":[23,99], "B":[24,88]})

def push(series):
  series -= 1
def pull(series):
  series /= 2

print("before:")
print(df)

Func =[{'func':'push','col':'A'},{'func':'pull','col':'B'}]

for f in Func:
  exec('{}(df[f["col"]])'.format(f['func']))

print("after:")
print(df)

输出:

before:
    A   B
0  23  24
1  99  88
after:
    A     B
0  22  12.0
1  98  44.0

【讨论】:

  • 如何在 Func 列表中将 push 和 pull 作为字符串传递?..因为 Func =[{'func':'push','col':'A'},{'func' :'pull','col':'B'}] 给我一个错误,str 对象不可调用。另外,我如何将参数传递给这些函数?
  • @Anti_cse51 我编辑了我的答案以使用exec 并将Func 与字符串一起使用,就像你原来的问题一样
猜你喜欢
  • 2021-09-17
  • 2013-10-12
  • 2021-10-14
  • 1970-01-01
  • 2012-11-30
  • 2017-08-21
  • 2018-11-11
  • 1970-01-01
相关资源
最近更新 更多