gpt4 book ai didi

python - 如何改进 Pandas 中数组的数据框创建

转载 作者:太空宇宙 更新时间:2023-11-03 15:46:50 25 4
gpt4 key购买 nike

我有两个数组 AB,其中包含一系列数字。

我的目标是创建一个具有以下结构的数据框:对于 B 的每个元素,我想对应 A 的所有值。

例如:if A = [0,2,5]B=[4,9,8] 我想获得以下对:0-4,0 -9,0-82-4,2-9,2-85-4,5-9,5-8

我能够通过以下方式实现我的目标:

import pandas as pd
import numpy as np

a, b = 1, 10
c, d = -10, -1
step = 0.5

A = np.arange(a,b,1)+step
B = np.arange(c,d,1)

df = pd.DataFrame()
for j in B:
for i in A:
name = 'H'+str(int(np.abs(i)))+str(int(np.abs(j)))
dic = {'XXX':[i],'YYY':[j],'ZZZ':name}
df = pd.concat([df,pd.DataFrame(dic)],ignore_index=True)

ZZZ,但计算方式如上所示。

我编写的代码工作正常,但当我增加 a,b,c,d 的值时,速度非常慢。

有没有更优雅的方式来实现我的目标?我想避免嵌套 for 循环,显然它应该是比我更有效的方法。

最佳答案

您可以通过 itertools.product 创建所有组合.

对于XXX列,将float转换为int,然后转换为str以删除小数,从列 >YYY 获取绝对值并转换为 str:

from  itertools import product
df = pd.DataFrame(list(product(B, A)), columns=['YYY','XXX'])
#swap columns
df = df[['XXX','YYY']]
df['ZZZ'] = 'H' + df.XXX.astype(int).astype(str) + df.YYY.abs().astype(str)

print (df.head(20))
XXX YYY ZZZ
0 1.5 -10 H110
1 2.5 -10 H210
2 3.5 -10 H310
3 4.5 -10 H410
4 5.5 -10 H510
5 6.5 -10 H610
6 7.5 -10 H710
7 8.5 -10 H810
8 9.5 -10 H910
9 1.5 -9 H19
10 2.5 -9 H29
11 3.5 -9 H39
12 4.5 -9 H49
13 5.5 -9 H59
14 6.5 -9 H69
15 7.5 -9 H79
16 8.5 -9 H89
17 9.5 -9 H99
18 1.5 -8 H18
19 2.5 -8 H28

关于python - 如何改进 Pandas 中数组的数据框创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41678405/

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