DataFrame应用并可变地返回多行?

时间:2017-09-21 10:00:31

标签: python pandas

我有一个带有列的数据框(比如说x),我想要应用一个非平凡的函数,这将导致多列(固定)和多个(未知)行。有没有办法优雅地做到这一点?

我知道如果您返回Series,则可以使用多个列执行此操作,但返回DataFrame个结果会应用返回Series个数据帧。我的解决方案有点像这样(模拟):

def func(a):
    return pd.DataFrame(np.ones((a, 2)), columns=['one', 'two'])

df = pd.DataFrame(data={'x': [1, 2, 1]})
pd.concat(df['x'].apply(func).tolist(), ignore_index=True)

是否有内置的方法可以做到这一点,或者至少有一些不那么人为的已知解决方案?

1 个答案:

答案 0 :(得分:1)

在我看来,你的解决方案很好。

您也可以使用list comprehension

df1 = pd.concat([func(x) for x in df['x']], ignore_index=True)
print (df1)
   one  two
0  1.0  1.0
1  1.0  1.0
2  1.0  1.0
3  1.0  1.0

或者有点黑客 - unique default index level=0def func(a): return pd.DataFrame(np.ones((a.iat[0], 2)), columns=['one', 'two']) df2 = df.groupby(level=0)['x'].apply(func) print (df2) one two 0 0 1.0 1.0 1 0 1.0 1.0 1 1.0 1.0 2 0 1.0 1.0 df2 = df.groupby(level=0)['x'].apply(func).reset_index(drop=True) print (df2) one two 0 1.0 1.0 1 1.0 1.0 2 1.0 1.0 3 1.0 1.0 ):

{{1}}