Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 平均填充数据帧列_Loops_Pandas_Iteration_Fill - Fatal编程技术网

Loops 平均填充数据帧列

Loops 平均填充数据帧列,loops,pandas,iteration,fill,Loops,Pandas,Iteration,Fill,我有一个如下所示的数据框: ID Name 1 Missing 2 Missing 3 Missing ....... 如果len(df)与我存储的许多名称(列表或词典)不一致,有没有一种方法可以让我平等地填写列名(+1)。如果我有两个名字。列的一半将命名为1,而另一半将命名为2。 我试过: 但这只会根据我有多少名字来填充我的前N行。我第一次尝试python问题,这肯定不是最有效的解决方案 import pandas as pd df = pd.DataFrame

我有一个如下所示的数据框:

ID    Name
1     Missing
2     Missing
3     Missing
.......
如果len(df)与我存储的许多名称(列表或词典)不一致,有没有一种方法可以让我平等地填写列名(+1)。如果我有两个名字。列的一半将命名为1,而另一半将命名为2。 我试过:


但这只会根据我有多少名字来填充我的前N行。

我第一次尝试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
你可以用

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')
[8]中的
:np.array(['Name1','Name2'])[np.linspace(0,2,11,endpoint=False).astype(int)]
出[8]:
数组(['Name1','Name1','Name1','Name1','Name1','Name1','Name2',',
“名称2”、“名称2”、“名称2”、“名称2”],

dtype='dear Sir是个了不起的人。使用您的方法unutbu我确实有一个结果,但在打印数据帧时,我得到一个错误:试图在数据帧的切片副本上设置一个值。请尝试使用.loc[row\u indexer,col\u indexer]=值而不是添加iloc无法解决此问题,相反,我的打印没有结果此警告--我相信这是一个用户警告,而不是一个例外--表示
df
是另一个数据帧片段的副本。出于大量的谨慎,此警告用于提醒您修改
df
可能不会影响原始数据帧。如果这不是您的意图,您可以忽略UserWarning。有关更多信息和使UserWarning静音的方法,请参阅。
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')