我有一个带有A,B列的数据帧然后我有函数foo(B)从第一个数据帧中取出参数B,返回的行数基于B的值,
import pandas as pd
import numpy as np
x = pd.DataFrame.from_items([('A', [1,1, 2, 3]), ('B', [4,3, 5, 6])])
def foo(B):
sX = pd.Series(np.random.randn(B))
sY = pd.Series(np.random.randn(B))
return pd.DataFrame.from_items([('X', sX.tolist()), ('Y', sY.tolist())])
foo(4)
foo(3)
我最终想要创建一个合并两个表的新数据框。
答案 0 :(得分:1)
按列x
和A
对数据框B
进行分组,然后使用apply
方法为每个组生成数据框:
(x.groupby(['A', 'B']).apply(lambda g: foo(g.B))
.reset_index(level=2, drop=True).reset_index())
答案 1 :(得分:0)
x = pd.DataFrame.from_items([('A', [1,1, 2, 3]), ('B', [4,3, 5, 6])])
def foo(B):
df = pd.DataFrame(np.random.randn(B,2), columns=['X','Y'])
df['tmp'] = B
return df
x.merge(pd.concat([foo(4), foo(3)]), left_on='B', right_on='tmp', how='left').drop('tmp',1)