【问题标题】:Applying a function to a list in a dataframe and create a new column with results将函数应用于数据框中的列表并创建一个包含结果的新列
【发布时间】:2021-09-18 03:33:28
【问题描述】:

我有一个如下所示的数据框,有 66,000 行..

Client Nodes
Client A [987673, 932132, 3132131, 3123443, ...]
Client B [4324234, 56345, 5435345, 5345345, ...]

我需要做的是在每一行的列表中运行以下函数,然后将结果放入新列中。

我尝试过使用 .apply 函数,但不知道如何在列表中循环

RouteNodeLL = []

for node in route_nodes:
    response_xml = requests.get(f'https://api.openstreetmap.org/api/0.6/node/{node}')
    response_xml_as_string = response_xml.content
    responseXml = ET.fromstring(response_xml_as_string)
    for child in responseXml.iter('node'):
        RouteNodeLL.append((float(child.attrib['lat']), float(child.attrib['lon'])))

【问题讨论】:

  • 但是如何将其应用于数据框行中的列表?那是我的问题
  • 迭代row.Nodes@DRobins
  • 创建一个包含一行的函数原型,在该函数中,您可以使用row.Nodes 访问行列(节点)。函数原型应该有行,因为那是在 lambda 中输入的内容。 def func_lambda(row).
  • 它看到该列是一个浮点数而不是一个列表,我收到一个类型错误

标签: python pandas list dataframe numpy


【解决方案1】:

假设您的 sn-p 中的代码实际上包含在一个函数中,您应该能够使用.apply,如下所示。

如果我有一个 DataFrame

df = pd.DataFrame({
    'Client': ['Client A', 'Client B'],
    'Nodes': [[987673, 932132, 3132131, 3123443], [4324234, 56345, 5435345, 5345345]]
})

我想根据每一行中的列表计算一些值(通常是总和),我可以定义一个函数来计算值

def my_fun(entry_list):
  return sum(entry_list)

并将函数应用于包含列表的列以创建新的所需列。

df['Result'] = df['Nodes'].apply(my_fun)

如果这不起作用,请提供更多上下文,例如实际功能。

【讨论】:

  • 这是我的意图,但是当我尝试上述操作时,我收到“TypeError: ("'float' object is not iterable" 错误,因为它没有将节点视为列表
  • 我需要更多的上下文,你能发送错误跟踪吗?我想知道哪条线触发了错误。上面的代码也是你函数的整个实现吗?我没有看到defreturn
猜你喜欢
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 2016-06-15
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多