gpt4 book ai didi

python - 在 pandas apply 方法中,根据条件复制行

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:00 25 4
gpt4 key购买 nike

这是我的 df 的一个例子:

pd.DataFrame([["1", "2"], ["1", "2"], ["3", "other_value"]],
columns=["a", "b"])
a b
0 1 2
1 1 2
2 3 other_value

我想说的是:

pd.DataFrame([["1", "2"], ["1", "2"], ["3", "other_value"], ["3", "row_duplicated_with_edits_in_this_column"]],
columns=["a", "b"])
a b
0 1 2
1 1 2
2 3 other_value
3 3 row_duplicated_with_edits_in_this_column

规则是使用 apply 方法,做一些检查(为了简单起见,我不包括这些检查),但在某些情况下,对于 apply 函数中的某些行,复制该行,进行编辑到该行并将两行插入 df。

所以像这样:

def f(row):
if condition:
row["a"] = 3
elif condition:
row["a"] = 4
elif condition:
row_duplicated = row.copy()
row_duplicated["a"] = 5 # I need also this row to be included in the df

return row
df.apply(f, axis=1)

我不想将重复的行存储在我的类中的某个位置并在末尾添加它们。我想即时进行。

我看过这个pandas: apply function to DataFrame that can return multiple rows但我不确定 groupby 是否可以帮助我。

谢谢

最佳答案

这是在列表理解中使用 df.iterrows 的一种方法。您需要将您的行附加到循环中,然后连接。

def func(row):
if row['a'] == "3":
row2 = row.copy()
# make edits to row2
return pd.concat([row, row2], axis=1)
return row

pd.concat([func(row) for _, row in df.iterrows()], ignore_index=True, axis=1).T

a b
0 1 2
1 1 2
2 3 other_value
3 3 other_value

我发现在我的情况下,没有 ignore_index=True 会更好,因为我稍后会合并 2 个 dfs。

关于python - 在 pandas apply 方法中,根据条件复制行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54037729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com