gpt4 book ai didi

python - pandas 版本的 SQL CROSS APPLY

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:54 25 4
gpt4 key购买 nike

假设我们有一个 DataFrame df

df = pd.DataFrame({
"Id": [1, 2],
"Value": [2, 5]
})

df
Id Value
0 1 2
1 2 5

和一些函数 f,它接受 df 的一个元素并返回一个 DataFrame。

def f(value):
return pd.DataFrame({"A": range(10, 10 + value), "B": range(20, 20 + value)})

f(2)
A B
0 10 20
1 11 21

我们想将 f 应用于 df["Value"] 中的每个元素,并将结果加入 df,如下所示:

    Id  Value   A   B
0 1 2 10 20
1 1 2 11 21
2 2 5 10 20
2 2 5 11 21
2 2 5 12 22
2 2 5 13 23
2 2 5 14 24

在 T-SQL 中,使用表 df 和表值函数 f,我们将使用 CROSS APPLY 执行此操作:

SELECT * FROM df
CROSS APPLY f(df.Value)

我们如何在 pandas 中做到这一点?

最佳答案

您可以在列表理解中将函数应用于 Value 中的每个元素并使用 pd.concat连接所有结果数据帧。还要分配相应的 Id,以便以后可以用于 merge两个数据框:

l = pd.concat([f(row.Value).assign(Id=row.Id) for _, row in df.iterrows()])
df.merge(l, on='Id')

Id Value A B
0 1 2 10 20
1 1 2 11 21
2 2 5 10 20
3 2 5 11 21
4 2 5 12 22
5 2 5 13 23
6 2 5 14 24

关于python - pandas 版本的 SQL CROSS APPLY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55725454/

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