gpt4 book ai didi

pandas - 将 Pandas 系列作为行有效地添加到现有数据帧

转载 作者:行者123 更新时间:2023-12-04 14:09:09 26 4
gpt4 key购买 nike

我有一个大约 160k 行 x 24 列的大数据框。我还有一个长度为 26 的 Pandas 系列,我想将它逐行添加到我的数据帧中,以制作一个 160k 行 x 50 列的最终数据帧,但我的代码非常缓慢。

具体来说,这很慢,但它有效:final = df.apply(lambda x: x.append(my_series), axis=1)
这会产生正确的最终形状:Out[49]: (163008, 50)
哪里,df.shapeOut[48]: (163008, 24)my_series.shapeOut[47]: (26,)
这种方法对于 <50k 行范围内的较小数据帧表现良好,但显然它并不理想。

更新:为以下解决方案添加了基准

使用 %timeit 做了一些测试带有测试数据框和测试系列,大小如下:test_df.shapeOut[18]: (156108, 24)test_series.shapeOut[20]: (26,)
数据框和系列都包含字符串、浮点数、整数、对象等的混合。

接受使用 Numpy 的解决方案 :
%timeit test_df.join(pd.DataFrame(np.tile(test_series.values, len(test_df.index)).reshape(-1, len(attributes)), index=test_df.index, columns=test_series.index))10 loops, best of 3: 220 ms per loop
使用赋值:
我一直在收到ValueError: Length of values does not match length of index使用我的测试系列,虽然当我使用更简单的系列时,只要它有效,我不确定这里发生了什么......

使用@Divakar 的自定义函数
%timeit rowwise_concat_df_series(test_df, test_series)1 loop, best of 3: 424 ms per loop

最佳答案

我们可以使用 DataFrame.assign()方法:

设置:

In [37]: df = pd.DataFrame(np.random.randn(5, 3), columns=['A','B','C'])

In [38]: my_series = pd.Series([10,11,12], index=['X','Y','Z'])

In [39]: df
Out[39]:
A B C
0 1.129066 0.975453 -0.737507
1 -0.347736 -1.469583 -0.727113
2 1.158480 0.933604 -1.219617
3 -0.689830 3.063868 0.345233
4 0.184248 0.920349 -0.852213

In [40]: my_series
Out[40]:
X 10
Y 11
Z 12
dtype: int64

解决方案:
In [41]: df = df.assign(**my_series)

结果:
In [42]: df
Out[42]:
A B C X Y Z
0 1.129066 0.975453 -0.737507 10 11 12
1 -0.347736 -1.469583 -0.727113 10 11 12
2 1.158480 0.933604 -1.219617 10 11 12
3 -0.689830 3.063868 0.345233 10 11 12
4 0.184248 0.920349 -0.852213 10 11 12

注意:该系列应该有 字符串 索引元素。

PS **variable explained

关于pandas - 将 Pandas 系列作为行有效地添加到现有数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45190712/

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