当Apply方法返回多行时,存储数据帧

2024-03-29 11:42:32 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个数据帧:

a=pd.DataFrame({'number':[1,2,3,4,5],'name':['A','B','C','D','E']})

我希望输出为:

b=pd.DataFrame({'number':[1,1,2,4,3,9,4,16,5,25],'name':['A','A','B','B','C','C','D','D','E','E']})

这是一个简单的例子,我想要实现的是在第一个数据帧的每一行上运行Apply函数,将返回2行的某个函数(比如func1)。我还需要将所有返回的行合并到一个数据帧中


Tags: 数据函数namenumberdataframe例子pdapply
3条回答

下面是一种我们可以使用apply函数的方法——对于每一行,我们输出一个数据帧——在使用apply之后,我们有一系列的数据帧,一旦我们对其进行处理,我们就会得到所需的结果。感谢Hossein指出我们想要使用apply

def func(series):
    result = series.copy()
    result[0] = result[0] ** 2
    return pd.concat([series, result], axis=1).T
b = pd.conact(a.apply(lambda row: func(row), axis=1).to_list())

您可以返回2个元素的列表,然后执行^{}

a.number = a.number.apply(lambda x: [x, x**2])
print( a.explode('number').reset_index(drop=True) )

印刷品:

  number name
0      1    A
1      1    A
2      2    B
3      4    B
4      3    C
5      9    C
6      4    D
7     16    D
8      5    E
9     25    E

你不需要apply,你几乎不会,pandas/numpy用矢量化的方法满足我们的大多数需求,这些方法要快得多。Apply基本上只是引擎盖下的一个for循环

在这种情况下,将pd.concatSeries.pow一起使用:

pd.concat([a, a.assign(number=a['number'].pow(2))]).sort_index()

   number name
0       1    A
0       1    A
1       2    B
1       4    B
2       3    C
2       9    C
3       4    D
3      16    D
4       5    E
4      25    E

相关问题 更多 >