亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何對熊貓中兩個不同大小數據集的列求和

如何對熊貓中兩個不同大小數據集的列求和

搖曳的薔薇 2022-05-19 16:18:22
我有兩個數據集。第一個 (df1) 包含超過 200.000 行,第二個 (df2) 只有兩行。我需要創建一個新列 df1['column_2'] ,它是 df1['column_1'] 和 df2['column_1'] 的總和當我嘗試制作 df1['column_2'] = df1['column_1'] + df2['column_1'] 時,我收到錯誤消息“試圖在 DataFrame 的切片副本上設置值。嘗試使用 . loc[row_indexer,col_indexer] = value 而不是"如何對具有不同行數的不同數據集的值求和?將不勝感激任何幫助!我的筆記本截圖:https ://prnt.sc/p1d6ze
查看完整描述

3 回答

?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

重新索引應用于與其他相比具有較少記錄數的 df,例如這里 y


減法:


import pandas as pd

import re

x = pd.DataFrame([(100,200),(300,400),(100,111)], columns=['a','b'])

y = pd.DataFrame([(1,2),(3,4)], columns=['a','b'])

z= x - y.reindex_like(x).fillna(0)

添加


import pandas as pd

import re

x = pd.DataFrame([(100,200),(300,400),(100,111)], columns=['a','b'])

y = pd.DataFrame([(1,2),(3,4)], columns=['a','b'])

z= x + y.reindex_like(x).fillna(0)

乘法


import pandas as pd

import re

x = pd.DataFrame([(100,200),(300,400),(100,111)], columns=['a','b'])

y = pd.DataFrame([(1,2),(3,4)], columns=['a','b'])

z= x * y.reindex_like(x).fillna(1)


查看完整回答
反對 回復 2022-05-19
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

我試過你的代碼,它使用Pandas 0.25.0 和Python 3.7.0沒有錯誤。如果您使用舊版本,請考慮升級。


對于測試,我使用了df1 10 行(更短):


   column_1

0        10

1        20

2        30

3        40

4        50

5        60

6        70

7        80

8        90

9       100

和df2有 2 行(就像在你的帖子中一樣):


   column_1

0         3

1         5

您的指令df1['column_2'] = df1['column_1'] + df2['column_1'] 給出以下結果:


   column_1  column_2

0        10      13.0

1        20      25.0

2        30       NaN

3        40       NaN

4        50       NaN

5        60       NaN

6        70       NaN

7        80       NaN

8        90       NaN

9       100       NaN

以便:


對具有“重疊”索引值的元素求和。

其他元素(在df2中沒有相應的索引是NaN。

由于存在NaN值,此列被強制為float。

該指令的替代形式,使用.loc[...]是:


df1['column_2'] = df1.loc[:, 'column_1'] + df2.loc[:, 'column_1']

它也適用于我的電腦。


或者,也許您想 在求和之前將df2 “乘”(復制)到df1的長度?如果是,請運行:


df1['column_2'] = df1.column_1 + df2.column_1.values.tolist() * 5

在這種情況下, 5是df2應該“相乘”的次數。


這次沒有發生索引對齊,結果是:


   column_1  column_2

0        10        13

1        20        25

2        30        33

3        40        45

4        50        53

5        60        65

6        70        73

7        80        85

8        90        93

9       100       105


查看完整回答
反對 回復 2022-05-19
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

我發現如果 df_1 是原始數據幀 df 的切片,我無法制作 df_1['column_3] = df_1['column_1] + df_1['column_2]。所以,我通過編寫一個函數解決了我的問題:


def new_column(dataframe):

    if dataframe['column']=='value_1':

   dataframe['new_column'] =(dataframe['column_1']

   - df_2[df_2['column']=='value_1']

      ['column_1'].values[0])

    else:

       dataframe['new_column'] =(dataframe['column_1']

       - df_2[df_2['column']=='value_2']

          ['column_1'].values[0])

    return dataframe

dataframe=df_1.apply(new_column,axis=1)


查看完整回答
反對 回復 2022-05-19
  • 3 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號