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)

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

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)
添加回答
舉報