我有两个数据帧,
df1
Name | std
kumar | 8
Ravi | 10
Sri | 2
Ram | 4
df2,
Name | std
Sri | 2
Ram | 4
我想从df1中减去df2行,我试过了,
df1.subtract(df2,fill_value=None)
但我收到错误,
TypeError: unsupported operand type(s) for -: 'str' and 'str'
我想要的输出,
df3
Name | std
kumar | 8
Ravi | 10
答案 0 :(得分:5)
df1[~df1.Name.isin(df2.Name)]
Name std
0 kumar 8
1 Ravi 10
答案 1 :(得分:2)
您使用merge
参数indicator
和外部联接,query
进行过滤,然后使用drop
删除帮助列:
DataFrames在所有列上都已加入,因此on
参数可以省略。
df1 = pd.DataFrame({'Name':['kumar','Ravi','Sri','Ram'],
'std':[8,10,2,4],
'col':list('abcd')})
print (df1)
Name col std
0 kumar a 8
1 Ravi b 10
2 Sri c 2
3 Ram d 4
df2 = pd.DataFrame({'Name':['Sri','Ram'],
'std':[2,4],
'col':list('cd')})
print (df2)
Name col std
0 Sri c 2
1 Ram d 4
df3 = pd.merge(df1, df2, how='outer', indicator=True)
.query('_merge=="left_only"')
.drop('_merge',1)
print (df3)
Name col std
0 kumar a 8
1 Ravi b 10
答案 2 :(得分:0)
你"数字"不是数字而是字符串。首先让他们成为数字。如果只有一些列是数字,请在转换前选择它们:
numeric = ["c1", "c2", "c3", ...] # All numeric columns
df1.set_index('Name')[numeric].astype(int) \
- df2.set_index('Name')[numeric].astype(int)