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)
添加回答
举报