按列合并csv文件



嘿,我使用python3,我想按列合并两个csv文件,我做得对,但我希望合并后只看两个数字,并按此合并。

例如,如果我有两个csv

df1:
X1     Y1     Z1
1.232  2.271  6
3.527  5.628  7
df2:
X2     Y2     Z2
1.231  2.275  6
3.526  5.624  7

当前的解决方案不会合并列X和Y,因为数字后的第三位数字是不同的,我希望合并推荐只看数字后的两位数字,并按它们合并。

这是我目前的解决方案:

from pandas import merge    
df1 = merge(df1, df2, left_on=['X1', 'Y1'], right_on=['X2', 'Y2'])

所以从这个解决方案中,两个数据帧不会合并,我希望它们合并并忽略数字后的第三个数字。

使用np.floor表示2位数后的截断值:

df1 = pd.merge(df1.assign(x11 = np.floor(df1['X1'], 2),
y11 = np.floor(df1['Y1'], 2)), 
df2.assign(x22 = np.floor(df1['X2'], 2),
y22 = np.floor(df1['Y2'], 2)), left_on=['x11', 'y11'], right_on=['x22', 'y22']

或者如果可能的话使用Series.round(值是四舍五入的,而不是分割的):

df1 = pd.merge(df1.assign(x11 = df1['X1'].round(2),
y11 = df1['Y1'].round(2)), 
df2.assign(x22 = df1['X2'].round(2),
y22 = df1['Y2'].round(2)), left_on=['x11', 'y11'], right_on=['x22', 'y22'])

或者使用多个100并将截断值转换为整数:

df1 = pd.merge(df1.assign(x11 = df1['X1'].mul(100).astype(int),
y11 = df1['Y1'].mul(100).astype(int)), 
df2.assign(x22 = df1['X2'].mul(100).astype(int)),
y22 = df1['Y2'].mul(100).astype(int)), left_on=['x11', 'y11'], right_on=['x22', 'y22'])