Python 将数据帧列添加到新数据帧

Python 将数据帧列添加到新数据帧,python,pandas,Python,Pandas,使用Pandas,我有一些数据要添加到我的“结果”数据框中。就是我有 naics=某些数据 看起来像这样 indnaics ind1990 89 81393 873 但是,它可以有多行。我想将它们与名为year的变量一起添加到我的结果数据框中。如果有多行,则所有行的year值应相同。这就是我目前正在尝试的 for job in jobs: df2 = iGetThisFromJob() years = df2.year.unique() nai

使用Pandas,我有一些数据要添加到我的“结果”数据框中。就是我有

naics=某些数据

看起来像这样

   indnaics  ind1990
89    81393      873
但是,它可以有多行。我想将它们与名为year的变量一起添加到我的
结果
数据框中。如果有多行,则所有行的
year
值应相同。这就是我目前正在尝试的

for job in jobs:
    df2 =  iGetThisFromJob()
    years = df2.year.unique()
    naics = iGetThisFromJob()
    if len(naics) == 0:
        continue

    for year in years:
        wages = df2.incwage[df2.year == year]
    # Add all the data to results, this is how I try it
        rows = pd.DataFrame([dict(year=year, incwage=mean(wages), )])
    # I also want to add the column indnaics from my naics 
        rows['naics'] = naics.indnaics
        results = results.append(rows, ignore_index=True)
但是,尽管naics.indnaics已满,但我无法以这种方式将其添加到rows对象

奈克斯

行['naics']=naics.indnaics 排

如果我的代码还有什么不好的地方,请告诉我。我才刚刚开始学熊猫

谢谢

/编辑 预期产出:

        incwage  year   naics
0  45853.061224  2002   81393
0  45853.061224  2002   12312
/编辑 建议的解决办法:

index = arange(0, len(naics))
columns = ['year', 'incwage', 'naics']
rows = pd.DataFrame(index=index, columns=columns)
rows.year = year
rows.incwage = mean(wages)
rows.naics = naics.indnaics.values

获取NaN值的原因是索引不匹配(在
行['naics']=naics.indnaics
中索引为0,而
naics.indnaics
中索引为89),分配该值将尝试对齐索引

例如,您可以通过只获取值来解决这个问题(例如通过
naics.indnaics.values
)。以玩具为例:

In [30]: df = pd.DataFrame({'A':[0], 'B':[1]})
In [31]: df
Out[31]: 
   A  B
0  0  1


In [32]: s = pd.Series([2], index=[83])
In [33]: s
Out[33]: 
83    2
dtype: int64

In [35]: df['new_column'] = s
In [36]: df
Out[36]: 
   A  B  new_column
0  0  1         NaN

In [37]: df['new_column'] = s.values
In [38]: df
Out[38]: 
   A  B  new_column
0  0  1           2
如果要添加可能包含更多值的序列,有几个选项。我想到:

例如,首先将数据帧重新索引为序列的长度:

In [75]: s
Out[75]: 
83    2
84    4
dtype: int64

In [76]: df
Out[76]: 
   A  B
0  0  1

In [77]: df = df.reindex(np.zeros(len(s)))
In [78]: df
Out[78]: 
   A  B
0  0  1
0  0  1

In [79]: df['new_column'] = s.values

In [80]: df
Out[80]: 
   A  B  new_column
0  0  1           2
0  0  1           4
或者反过来,将数据帧添加到序列中(首先转换为数据帧):


你能给出一个具体的数据框架例子来说明这个问题吗?以及该示例的预期输出。因此,一个示例
df2
naics
我认为我的输出最终足够了-它显示了naics的格式,以及行实际变成什么(NaN-而不是变成81393)和df2实际上与我问题的这一部分无关,因为代码的这一部分起作用(incwage和year都有正确的值)-我只是把它放在这里,就我正在尝试做的事情给出正确的想法。总是很难猜测发生了什么,当然也很难看到如果你不能自己快速尝试的话如何解决它(除非它是非常明显的)。因此,请尽量提供一个简短的、我们可以运行的自包含示例(请参阅)。此外,很有可能您可以更简单地完成整个for循环,但如果我们不知道发生了什么,则很难给出建议),当naics包含一行时,该循环有效,但当它包含两行时则无效。它会引发
ValueError:值的长度与索引的长度不匹配
OK,但是预期的输出是什么?如何将两个元素添加到一列(当dataframe只有一行时)?它应该重复其他值-我将其添加到问题中的/edit中。如果没有这个索引问题,我认为这将是熊猫的标准行为。您将向数据帧添加一列,这样只会添加一列,而不会更改列的其余部分。所以我想没有比我上次编辑的问题更干净的方法了?
In [30]: df = pd.DataFrame({'A':[0], 'B':[1]})
In [31]: df
Out[31]: 
   A  B
0  0  1


In [32]: s = pd.Series([2], index=[83])
In [33]: s
Out[33]: 
83    2
dtype: int64

In [35]: df['new_column'] = s
In [36]: df
Out[36]: 
   A  B  new_column
0  0  1         NaN

In [37]: df['new_column'] = s.values
In [38]: df
Out[38]: 
   A  B  new_column
0  0  1           2
In [75]: s
Out[75]: 
83    2
84    4
dtype: int64

In [76]: df
Out[76]: 
   A  B
0  0  1

In [77]: df = df.reindex(np.zeros(len(s)))
In [78]: df
Out[78]: 
   A  B
0  0  1
0  0  1

In [79]: df['new_column'] = s.values

In [80]: df
Out[80]: 
   A  B  new_column
0  0  1           2
0  0  1           4
In [90]: ss = s.to_frame().set_index(np.array([0,0]))
In [91]: ss[df.columns] = df
In [92]: ss
Out[92]: 
   0  A  B
0  2  0  1
0  4  0  1

[2 rows x 3 columns]