同样填充数据框列

时间:2016-11-30 11:38:32

标签: loops pandas iteration fill

我的数据框如下所示:

ID    Name
1     Missing
2     Missing
3     Missing
.......

如果len(df)与我存储的多个名称(列表或字典)不一致,有没有办法可以平均填写列名(+1)。对于Ex,如果我有2个名字。列的一半是Name1,而另一半是Name2。 我试过了:

for i in (range(len(df)/no_names)):
    counter=0
    df.ix[i]['Name'] = dictionary.values()[0]

但根据我有多少名字,这只会填入前N行。

2 个答案:

答案 0 :(得分:2)

您可以使用

import numpy as np
N = len(df)
df['Name'] = np.array(['Name1', 'Name2'])[np.linspace(0,2,N,endpoint=False).astype(int)]

这里的想法是创建一个0和1的数组,例如

In [34]: np.linspace(0,2,11,endpoint=False).astype(int)
Out[34]: array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1])

现在我们可以使用NumPy索引创建一个'Name1'和'Name2'值的数组:

In [8]: np.array(['Name1', 'Name2'])[np.linspace(0,2,11,endpoint=False).astype(int)]
Out[8]: 
array(['Name1', 'Name1', 'Name1', 'Name1', 'Name1', 'Name1', 'Name2',
       'Name2', 'Name2', 'Name2', 'Name2'], 
      dtype='<U5')

答案 1 :(得分:1)

我第一次尝试python问题,这绝对不是最有效的解决方案。

import pandas as pd
df = pd.DataFrame({'a':[1,4,4,0,4,0,4,0],'b':[2,1,4,0,4,0,4,0]})
#df
#Out[76]: 
#   a  b
#0  1  2
#1  4  1
#2  3  3
#3  4  4
#4  0  0
#5  4  4
#6  0  0
#7  4  4
#8  0  0

根据每列的长度,相应地重复Name1和Name2

df['new'] = np.repeat(np.array(["A", "B"]), repeats=[round(df.shape[0]/2), df.shape[0]-round(df.shape[0]/2)])

#Out[81]: 
#   a  b new
#0  1  2   A
#1  4  1   A
#2  3  3   A
#3  4  4   A
#4  0  0   B
#5  4  4   B
#6  0  0   B
#7  4  4   B
#8  0  0   B