gpt4 book ai didi

python-3.x - Python- Pandas : How to add a series to each row in dataframe

转载 作者:行者123 更新时间:2023-12-03 11:16:51 26 4
gpt4 key购买 nike

我有这个数据框。

>>> print(df)
a b c d e
0 z z z z z
1 z z z z y
2 z z z x y
3 z z w x y
4 z v w x y

我也有一个系列。

>>> print(map_class)
class
0 -1
1 0
2 1
3 2
4 3
5 4
6 5
7 6
8 7
9 8
10 9
11 10

我的目标是将系列添加到数据框中的每一行。我想要的输出如下。

>>> print(result)
a b c d e class
0 z z z z z -1
1 z z z z z 0
2 z z z z z 1
3 z z z z z 2
4 z z z z z 3
5 z z z z z 4
6 z z z z z 5
7 z z z z z 6
8 z z z z z 7
9 z z z z z 8
10 z z z z z 9
11 z z z z z 10
...
48 z v w x y -1
49 z v w x y 0
50 z v w x y 1
51 z v w x y 2
52 z v w x y 3
53 z v w x y 4
54 z v w x y 5
55 z v w x y 6
56 z v w x y 7
57 z v w x y 8
58 z v w x y 9
59 z v w x y 10

目前我正在通过使用for 循环来做到这一点。但是,性能很差。除了不使用 for 循环之外,还有其他方法可以做到这一点吗?这是我当前的代码。

result = pd.DataFrame()

for i in range(len(df)):
df_temp_multiple = pd.DataFrame()

df_temp_single = df.iloc[i]

df_temp_multiple = df_temp_multiple.append([df_temp_single]*len(map_class), ignore_index=True)
df_temp_multiple = pd.concat([df_temp_multiple, map_class], axis=1)

result = pd.concat([result, df_temp_multiple], ignore_index=True)

我的真实数据集非常庞大,超过 10Gb。因此,性能真的很重要。任何建议将不胜感激。谢谢!

最佳答案

这是一种使用 NumPy 创建输出数据的方法,特别是在其中使用 NumPy's advanced-indexing最后从该输出数据构建数据框 -

m,n,r = df.shape[0], map_class.shape[0], df.shape[1]

out = np.empty((m,n,r+1),dtype=object)
out[:,:,:r] = df.values[:,None,:]
out[:,:,-1] = map_class.values[:,0]
col_names = list(df.columns) + list(map_class.columns)
df_out = pd.DataFrame(out.reshape(m*n,-1), columns=col_names)

运行时测试-

# Loopy version from the question
In [50]: %timeit func0(df, map_class)
100 loops, best of 3: 16 ms per loop

# Proposed one in this post
In [51]: %timeit func1(df, map_class)
10000 loops, best of 3: 152 µs per loop

In [52]: 16000.0/152
Out[52]: 105.26315789473684

100x+ 样本数据加速,并希望对于更大的数据集也能很好地扩展。

关于python-3.x - Python- Pandas : How to add a series to each row in dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42691991/

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