【问题标题】:Concat Dataframe to other DataFrame inside python function将数据帧连接到 python 函数中的其他数据帧
【发布时间】:2021-07-14 12:04:37
【问题描述】:
 def fun(output_data):

        dic_ = dict.fromkeys(output_data.columns, "first")
        dic_.pop("col1")
        dic_.pop('col2')
        dic_.update({
            'col9': "sum",
            'col10': "sum",
            'col11': "sum",
            'col12': "sum",
        })

        tmp = output_data[output_data['col100'].eq('B2C')].groupby(
            ['col1', 'col2'], sort=False, as_index=False).agg(dic_)[list(output_data.columns)].reset_index(
            drop=True)

        output_data = pd.concat(
            [tmp,
             output_data[output_data['col100'].ne('B2C')]])

我有一个数据框,我必须在其中过滤然后分组,然后在某些列上聚合。但是在连接之后,我想更改作为函数参数的数据框。我尝试这样做,但没有得到想要的结果。

pd.concat()中没有inplace=True的选项

例子:

输入数据帧

col1    col2    col3 col4 col5 ...... col100
fixval  fixval  12   'a'   'b' ...... B2C 
fixval  fixval  12   'a'   'c' ...... B2C 
fixval  fixval  12   'a'   'b' ...... B2C 
fixval  fixval  12   'a'   'b' ...... B2C 
fixval  fixval  12   'b'   'a' ...... B2B
fixval  fixval  12   'b'   'a' ...... B2B 

输出数据帧

col1    col2    col3 col4 col5 ...... col100
fixval  fixval  36   'a'   'b' ...... B2C 
fixval  fixval  12   'a'   'c' ...... B2C 
fixval  fixval  12   'b'   'a' ...... B2B
fixval  fixval  12   'b'   'a' ...... B2B 

在 col4 和 col5 上完成分组并在 col100 上完成过滤,其中 value = B2C。

然后我需要将它分配回作为函数参数的原始数据帧。

【问题讨论】:

  • concat 将返回一个新的数据帧。您必须从fun 退回并分配回来。 return pd.concat.... 然后output_data = fun(output_data)
  • @HenryEcker 感谢您的建议。但是这个函数是动态调用的,所以它对我来说是不可能的。目前函数只能返回一个系列,这就是它的实现方式。我需要更改函数内部的数据框。
  • pandas 中没有 inplace concat appendmerge 操作。似乎有关此功能/程序整体结构的约束的更多信息将有助于提供一些选项。
  • @HenryEcker 我们不能用 .loc 实现它吗?
  • 假设tmpoutput_data[output_data['col100'].ne('B2C')]] 没有任何共享索引。

标签: python pandas group-by concatenation


【解决方案1】:

到目前为止我能找到的解决方案之一。

这可能不是最好的解决方案,但可以满足更新函数内部数据框的需要。

output_data.drop(output_data.loc[output_data['col100'].eq('B2C')].index, inplace=True)

for idx, row in tmp.iterrows():
    output_data.loc[len(output_data)] = row

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-11
    • 2022-11-29
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2022-07-06
    相关资源
    最近更新 更多