gpt4 book ai didi

python - 比较两列,一列通过 float ,另一列通过字符串来获得匹配值

转载 作者:行者123 更新时间:2023-11-28 20:57:32 25 4
gpt4 key购买 nike

我有两个数据框,其中有两列非常重要。其中一列由 float64 值组成,另一列是字符串。数据帧的大小不同。

我想同时匹配 Number 列和 Item 列,然后只获取匹配的那些。

df1 = pd.DataFrame({ 'Number':[1.0,3.0,4.0,5.0,8.0,12.0,32.0,58.0] , 'Item': ['Phone', 'Watch', 'Pen', 'Pencil', 'Pencil','toolkit','box','fork']})

df2 = pd.DataFrame({'Number':[3.0,4.0,8.0,12.0,15.0,32.0,54.0,58.0,72.0], 'Item':['Watch','Pen','Pencil','Eraser','bottle','box','toolkit','fork','Phone']})

df1
Number Item
0 1.0 Phone
1 3.0 Watch
2 4.0 Pen
3 5.0 Pencil
4 8.0 Pencil
5 12.0 toolkit
6 32.0 box
7 58.0 fork

df2
Number Item
0 3.0 Watch
1 4.0 Pen
2 8.0 Pencil
3 12.0 Eraser
4 15.0 bottle
5 32.0 box
6 54.0 toolkit
7 58.0 fork
8 72.0 Phone

我正在尝试使用 forloop,但循环很长。这似乎是实现这一目标的非常糟糕的方法。我正在尝试使用掩码操作但不确定如何实现。感谢帮助以最短的方式执行此操作。

想要的结果应该是这样的:

      Item  Matching  Number
0 Phone No Match 1.0
1 Watch Matched 3.0
2 Pen Matched 4.0
3 Pencil No Match 5.0
4 Pencil Matched 8.0
5 toolkit No Match 12.0
6 box Matched 32.0
7 fork Matched 58.0

最佳答案

如果问题合并浮点值,可能乘以 1000 并转换为整数,然后 merge使用左连接,因为匹配应该有问题,baciuse float precision 应该在两列中不同:

df1['Number1'] = df1['Number'].mul(1000).astype(int)
df2['Number1'] = df2['Number'].mul(1000).astype(int)

df = pd.merge(df1, df2.drop('Number', 1), how='left', on=['Item','Number1'], indicator=True)
df['Matching'] = df['_merge'].map({'left_only':'No Match', 'both':'Match'})

df = df.drop(['Number1','_merge'], axis=1)
print (df)

Number Item Matching
0 1.0 Phone No Match
1 3.0 Watch Match
2 4.0 Pen Match
3 5.0 Pencil No Match
4 8.0 Pencil Match
5 12.0 toolkit No Match
6 32.0 box Match
7 58.0 fork Match

关于python - 比较两列,一列通过 float ,另一列通过字符串来获得匹配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52870611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com