【发布时间】:2018-03-17 19:12:37
【问题描述】:
我有两个问题,因为我正在尝试执行以下操作:
1) 对两个不同大小的数据帧进行内部合并以检查相交值并存储到第三个数据帧中,df1 和 df2 的维度如下:df1.shape 为 (10000, 1893) 和 df2。 shape 为 (90000, 1893),具有相同的列标题。
2) 如果我想通过逐元素迭代检查有多少 df2 值适合 df1 值的范围间隔(假设范围在 0.9 * df1 到 1.1 * df1 之间),然后我想要将匹配值存储到第四个数据帧中。
以下是我目前所拥有的代码:
import pandas as pd
import numpy as np
df1 = pd.read_csv('file1.csv', squeeze = True)
MW AMW ...
0 160.17, 8.483, ...
1 162.20, 7.373, ...
2 162.16, 7.373, ...
. . . ...
. . . ...
. . . ...
9997 447.78, 9.329, ...
9998 447.78, 9.329, ...
9999 447.78, 9.330, ...
[10000, 1893]
df2 = pd.read_csv('file2.csv', squeeze = True)
MW AMW ...
0 160.28, 5.724, ...
1 160.18, 8.009, ...
2 160.19, 8.009, ...
. . . ...
. . . ...
. . . ...
89997 447.78, 9.329, ...
89998 447.78, 9.329, ...
89999 447.78, 9.329, ...
[90000, 1893]
对于第一部分,我尝试了以下方法:
df3 = pd.merge(df1, df2, how = 'inner')
print df3
Empty DataFrame Columns:
[MW, AMW, Sv, Se, Sp, Si, Mv, Me, Mp, Mi, GD, nAT, nSK, nTA, nBT, nBO, nBM, SCBO, RBN, RBF, nAB, nH, nC, nN, nO, nS, nHM, nHet, H%, C%, N%, O%, nCsp3, nCsp2, nCIC, nCIR, TRS, Rperim, Rbrid, MCD, RFD, RCI, NRS, NNRS, nR05, nR06, nR10, nBnz, ARR, D/Dtr05, D/Dtr06, D/Dtr10, ZM1, ZM1V, ZM1Kup, ZM1Mad, ZM1Per, ZM1MulPer, ZM2, ZM2V, ZM2Kup, ZM2Mad, ZM2Per, ZM2MulPer, ON0, ON0V, ON1, ON1V, Qindex, BBI, DBI, SNar, HNar, GNar, Xt, Dz, Ram, BLI, Pol, LPRS, MSD, SPI, PJI2, ECC, AECC, DECC, MDDD, UNIP, CENT, VAR, ICR, SMTI, SMTIV, GMTI, GMTIV, Xu, CSI, Wap, S1K, S2K, ...]
Index: []
[0 rows x 1893 columns]
我不明白为什么我得到一个只有列标题的空数据框。谁能告诉我我做错了什么?
对于第二部分,我尝试创建一个函数来检查任何适合区间范围的值(我从我在 stackflow 上查找的一个问题中得到了这个想法,并且回答的人建议这样做)。但是,我仍然没有得到正确的结果。
这是我的第二部分代码:
def checkfunc(x, df2):
idx = df2['MW'] == x['MW']
df2 = df2.loc[idx]
check = (df2 >= (x * 0.9)) & (df2 <= (x * 1.1))
return check.any()
df4 = df2[df2.apply(lambda x: checkfunc(x, df2), axis=1)].drop_duplicates()
print df4
对于第二部分,我不断地进入一个根本不收敛的连续迭代。我还查看了 np.where() 和 pd.DataFrame.isin() 方法,但我也无法让它们工作。谁能提出解决这些问题的好方法?
【问题讨论】: