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

时间:2017-01-16 14:15:12

标签: python pandas for-loop dataframe concatenation

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

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

例如: 如果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循环,它应该是一种比我更有效的方法。

1 个答案:

答案 0 :(得分:1)

您可以按itertools.product创建所有组合。

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

str