【问题标题】:Python3 pandas groupby apply store return value in listPython3 pandas groupby 在列表中应用商店返回值
【发布时间】:2021-02-26 09:09:18
【问题描述】:

有了这个数据框:

   index  order_id  id_product  qty  comments                 date last_name
0      0        55   100000158    2       NaN  2020-10-26T14:33:00     Stone
1      1        55   100000339    1       NaN  2020-10-26T14:33:00     Stone

我创建一个列表,分组并应用:

list_test = []

df_g = df.groupby('order_id')

df_g.apply(process_order,dealer_id,file)

一个测试函数来测试如何返回一个元素:

def process_order(df,dealer_id,file):
    if True:
        return 'bob'

如何将 process_order 返回的字符串 'test' 附加到列表 list_test 中?

结果如下:

print(list_test)
['bob']

【问题讨论】:

  • 我承认我不明白你在这里要做什么。我相信传递给apply 的函数只接受一个参数。话虽如此,将项目附加到列表test_list 的唯一方法是从函数范围之外获取对它的引用(例如,如果它在模块中声明,或者在 test_function是嵌套的)或将其作为参数传递给函数。
  • 我试图在 process_order() 函数中列出错误,以便稍后处理它们。如果 process_order() 函数一切顺利,那么 list_test 应该是空的。但如果发现错误,我想将其附加到列表中
  • 您可以将错误列表添加到函数的参数中,并附加任何类似的错误。 def process_order(df,dealer_id,file, errors_list):
  • 就像我说的,有两种方法可以获取对该列表的引用:将其作为参数传递或从包含范围访问它。如果它是在模块级别声明的,你甚至可以为不同的模块导入它(尽管我不建议这样做。)

标签: python python-3.x pandas dataframe return


【解决方案1】:

请注意,我同意其他人的回答,即很难理解您如何/为什么要按照自己的方式进行分组,但您可能只想在操作期间创建一个名为“测试”的新列。 比如:

df_g['test'] = df_g.apply(process_order,dealer_id,file)

将函数应用于组或整个数据框后,您可以使用获取列表

list_test = df_g['test'].tolist()

根据包含或不包含的内容,您可能必须在创建列表之前过滤测试为空的行的数据框或组

【讨论】:

    猜你喜欢
    • 2016-07-02
    • 2019-09-06
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多