我有两个正在尝试合并的数据帧。
数据帧A:
col1 col2 sub grade
0 1 34.32 x a
1 1 34.32 x b
2 1 34.33 y c
3 2 10.14 z b
4 3 33.01 z a
数据帧B:
col1 col2 group ID
0 1 34.32 t z
1 1 54.32 s w
2 1 34.33 r z
3 2 10.14 q z
4 3 33.01 q e
我想在col1和col2上合并。我一直在使用以下语法进行pd.merge:
pd.merge(A, B, how = 'outer', on = ['col1', 'col2'])
然而,我认为我在连接col2的浮点值时遇到了问题,因为很多行都被删除了。有没有办法使用np.isclose来匹配col2的值?当我在任一数据帧中引用col2的特定值的索引时,该值的小数位数比数据帧中显示的要多得多。
我希望结果是:
col1 col2 sub grade group ID
0 1 34.32 x a t z
1 1 34.32 x b s w
2 1 54.32 s w NaN NaN
3 1 34.33 y c r z
4 2 10.14 z b q z
5 3 33.01 z a q e
发布于 2016-12-14 06:55:40
您可以使用一些小技巧-多个浮点列通过一些常量,如100
,1000
...,转换列为int
,merge
和最后除以常量:
N = 100
#thank you koalo for comment
A.col2 = np.round(A.col2*N).astype(int)
B.col2 = np.round(B.col2*N).astype(int)
df = pd.merge(A, B, how = 'outer', on = ['col1', 'col2'])
df.col2 = df.col2 / N
print (df)
col1 col2 sub grade group ID
0 1 34.32 x a t z
1 1 34.32 x b t z
2 1 34.33 y c r z
3 2 10.14 z b q z
4 3 33.01 z a q e
5 1 54.32 NaN NaN s w
发布于 2018-07-17 17:54:19
我遇到了一个类似的问题,我需要识别具有数千个浮点列的匹配行,但没有标识符。这种情况很困难,因为值可能会因四舍五入而略有不同。
在本例中,我使用scipy.spatial.distance.cosine来获取行之间的余弦相似度。
from scipy import distance
threshold = 0.99999
similarity = 1 - spatial.distance.cosine(row1, row2)
if similarity >= threshold:
# it's a match
else:
# loop and check another row pair
如果您有重复或非常相似的行,这将不起作用,但当您有大量的浮点列和不太多的行时,它可以很好地工作。
https://stackoverflow.com/questions/41135371
复制相似问题