【发布时间】: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 中没有
inplaceconcatappend或merge操作。似乎有关此功能/程序整体结构的约束的更多信息将有助于提供一些选项。 -
@HenryEcker 我们不能用 .loc 实现它吗?
-
假设
tmp和output_data[output_data['col100'].ne('B2C')]]没有任何共享索引。
标签: python pandas group-by concatenation