簡體   English   中英

將Pandas Dataframe-column添加到新數據幀

[英]Adding a Pandas Dataframe-column to a new dataframe

使用Pandas,我有一些數據要添加到我的``results''數據幀中。 就是,我有

naics = someData

哪個看起來像這樣

   indnaics  ind1990
89    81393      873

但是,它可以有多行。 我想將這些添加到我的results數據框中,以及一個名為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.indnaics

Out[1052]: 
89    81393

rows ['naics'] = naics.indnaics行

Out[1051]: 
        incwage  year naics
0  45853.061224  2002   NaN

如果還有其他任何與我的代碼不相符的內容,請告訴我們。 我才開始學習熊貓。

謝謝!

/編輯預期輸出:

        incwage  year   naics
0  45853.061224  2002   81393
0  45853.061224  2002   12312

/ edit建議的解決方案:

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值的原因是因為索引不匹配( rows['naics'] = naics.indnaics rows有索引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

或者反過來,將數據框添加到系列(您首先轉換為數據框):

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM