Den*_*loe 3 python sql t-sql dataframe pandas
假设我们有一个DataFrame df
df = pd.DataFrame({
"Id": [1, 2],
"Value": [2, 5]
})
df
Id Value
0 1 2
1 2 5
Run Code Online (Sandbox Code Playgroud)
还有一些函数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
Run Code Online (Sandbox Code Playgroud)
我们希望将应用于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
Run Code Online (Sandbox Code Playgroud)
在T-SQL中,使用表df和表值函数f,我们可以使用CROSS APPLY来做到这一点:
SELECT * FROM df
CROSS APPLY f(df.Value)
Run Code Online (Sandbox Code Playgroud)
我们如何才能做到这一点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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |