Pandas 熊猫-匹配2数据帧值
我正在尝试与以下2个数据帧进行匹配: df_公司:Pandas 熊猫-匹配2数据帧值,pandas,Pandas,我正在尝试与以下2个数据帧进行匹配: df_公司: Cntr No Labour Material Amount BHCU 2604370 0.0 82.5 82.5 BHCU 2604370 24.0 22.0 46.0 df: 代码: 它不应该给我一个匹配,因为df_co‘金额’是82.5,df‘总额’是82.00 但我的结果让我两者都匹配 结果: Cntr No Total
Cntr No Labour Material Amount
BHCU 2604370 0.0 82.5 82.5
BHCU 2604370 24.0 22.0 46.0
df:
代码:
它不应该给我一个匹配,因为df_co‘金额’是82.5,df‘总额’是82.00
但我的结果让我两者都匹配
结果:
Cntr No Total Tally
BHCU 2604370 82.0 Yes
BHCU 2604370 46.0 Yes
怀疑代码比较错误
转换为浮动:
a = df.iloc[:, :5]
b = df.iloc[:,5:29].apply(lambda x :
x.str.extract('(\d+)',expand=False).astype(float))
c = df.iloc[:, 29:]
df = pd.concat([a,b,c], axis=1)
使用:
进一步检查,似乎数字原来是82.50,在转换为浮点型后才更改为82.0。请参阅我的帖子以获取更新的代码。@okl-我认为需要
x.str.extract('(\d+\.\d+)
-从@okl-如果不保密,是否可以共享数据?哦,我的错误,值仍然存在,只有0更改为nan。是否可以将nan更改回0?我尝试了df=df.fillna('0'),但出现错误…AttributeError:(“只能使用带字符串值的.str访问器,它在pandas中使用np.object dtype”,“发生在索引服务INT/EX WASH40英尺处”)可能需要b=df.iloc[:,5:29]。fillna('0')。astype(str)
Cntr No Total Tally
BHCU 2604370 82.0 Yes
BHCU 2604370 46.0 Yes
a = df.iloc[:, :5]
b = df.iloc[:,5:29].apply(lambda x :
x.str.extract('(\d+)',expand=False).astype(float))
c = df.iloc[:, 29:]
df = pd.concat([a,b,c], axis=1)
df = df.merge(df_co.melt('Cntr No', value_name='Total', var_name='Tally'), on=['Cntr No', 'Total'], how='left')
df['Tally'] = df['Tally'].notnull().map({True:'Yes',False:'No'})
print (df)
Cntr No Total Tally
0 BHCU 2604370 82.0 No
1 BHCU 2604370 46.0 Yes