我有一个数据框:
import pandas as pd
d = {'id': [1,1,1,1,2,2,3,3,3,4,4,4,4],
'name':['ada','aad','ada','ada','dddd','fdd','ccc','cccd','ood','aaa','aaa','aar','rrp']
,'amount':[2,-12,12,-12,5,-5,2,3,-5,3,-10,10,-10]}
df1 = pd.DataFrame(d)
df1
id name amount
0 1 ada 2
1 1 aad -12
2 1 ada 12
3 1 ada -12
4 2 dddd 5
5 2 fdd -5
6 3 ccc 2
7 3 cccd 3
8 3 ood -5
9 4 aaa 3
10 4 aaa -10
11 4 aar 10
12 4 rrp -10
首先,我想找到每个id的负数的匹配正数,我通过以下方法完成:
def match_pos_neg(df):
return df[df["amount"].isin(-df["amount"])]
df1 = df1.groupby("id").apply(match_pos_neg).reset_index(0, drop=True)
df1
id name amount
1 1 aad -12
2 1 ada 12
3 1 ada -12
4 2 dddd 5
5 2 fdd -5
10 4 aaa -10
11 4 aar 10
12 4 rrp -10
下一步我要做的是只获取字符串列“name”中相似性最高的匹配pos和neg数字对。因此,如果一个id有两个与正数匹配的其他负数,我想分离每个id相似性最高的对,因此我希望所需的输出如下:
id name amount
2 1 ada 12
3 1 ada -12
4 2 dddd 5
5 2 fdd -5
10 4 aaa -10
11 4 aar 10
我想我必须使用某种类型的字符串相似性索引,如sequencematcher或jaccard等,但我不确定如何解决这个问题。如果您能帮助我获得所需的输出,我们将不胜感激
您可以尝试以下方法:
请注意,您可以根据需要更改打印的信息,只需编辑函数create_sim中的返回值
编辑:
要使用结果生成DF,您可以将其更改为:
相关问题 更多 >
编程相关推荐