2016-02-04 53 views
0

我想用一系列计算的非平凡数填充可变长度的列,以便它可以匹配数据帧列中的一组数据。结果将是一个数据帧两列宽由一些大数字(这里20行长)。我知道如何计算系列:如何用计算的数字填充数组“列”

while p < 20: 
    r = p * 9890 
    d.append(r) 
    p +=1 

,但它会导致 “水平” 字符串:

print(d) 

[0,9890,19780,29670,39560,49450,59340,69230,79120 ,89010,98900,108790,118680,128570,138460,148350,158240,168130,178020,187910]

我该如何让这个“垂直”列?

回答

0

那么你最初构建的是一个香草python列表,当然这个列表没有行或列的概念,因为它本质上是一维的。虽然我不熟悉的大熊猫,假设它使用numpy的数组,你可以做到以下几点:

d = numpy.array(d)  #convert to a numpy array 
d = d[numpy.newaxis]  #convert from 1D to 2D 
d = d.T     #transpose to make a "column" 

或者在单行:

d = numpy.array(d)[numpy.newaxis].T 
0

使用python和熊猫

DF ['new'] = df ['datatoiterateover']。apply(函数x:x)将把所有的数据放在一个新列中。

0
>>> import pandas as pd 
>>> d = [] 
>>> for i in range(20): 
...  d.append(i * 9890) 
... 
>>> df = pd.DataFrame({'column_header': d}) 
>>> df.head() 
    column_header 
0    0 
1   9890 
2   19780 
3   29670 
4   39560 
>>> 
0

numpy可以非常干净地创建阵列,并且可以在现有的DataFrame直接分配到一个pandas.DataFrame柱或与列进行比较。它

import numpy as np 
... 
d = np.arange(20)*980 

您可以直接比较dDataFrame列,你不必与它的“方向”垂直或水平关心你。

0

使用numpy.arrays和切片:

a = np.array([0, 9890, 19780, 29670, 39560, 49450, 59340, 69230, 79120, 89010, 98900, 108790, 118680, 128570, 138460, 148350, 158240, 168130, 178020, 187910]) 

In [3]: a[:,None] 
Out[3]: 
array([[  0], 
     [ 9890], 
     [ 19780], 
     [ 29670], 
     [ 39560], 
     [ 49450], 
     [ 59340], 
     [ 69230], 
     [ 79120], 
     [ 89010], 
     [ 98900], 
     [108790], 
     [118680], 
     [128570], 
     [138460], 
     [148350], 
     [158240], 
     [168130], 
     [178020], 
     [187910]]) 
0
from numpy import * 
d=[] 
p=0 
while p < 20: 
    r = p * 9890 
    d.append(r) 
    p +=1 

result=array(d).reshape(20,1)