我有两个这样的数据帧:第一个有一列和720行(数据帧A),第二个有十列和720行(数据帧B)。数据框仅包含数值。
我正在尝试通过以下方式对其进行比较:我想遍历数据帧B的每一列,并将该列的每个单元格(行)与数据帧A中的对应行进行比较。 (例如:对于数据框B的第一列,我将数据框A的第一行与第一行进行比较,然后将B的第二行与A的第二行进行比较,依此类推。)
基本上,我想逐行比较数据框B的每一列与数据框A中的单列。
如果数据框B中的值小于或等于数据框A中的值,我想将+1添加到另一个数据框(或列表,具体取决于它的难易程度)。最后,我想删除数据帧B中任何没有至少一个单元格来满足条件的列(基本上,如果添加到列表或新数据帧的值为0)。
我尝试过这样的事情(写成一行,我当时想使用它创建一个for循环),但是它似乎并没有达到我想要的效果:
DfA_i = pd.DataFrame(DA.iloc[i])
DfB_j = pd.DataFrame(DB.iloc[j])
B = DfB_j.values
DfC['Criteria'] = DfA_i.apply(lambda x: len(np.where(x.values <= B)), axis=1)
dv = dt_dens.values
if dv[1] < 1:
DF = DA.drop(i)
我希望我已经清楚地说明了我的问题,对于任何错误,我们深表歉意。感谢您的帮助。
答案 0 :(得分:0)
让我们尝试一下:
dfB.loc[:, dfB.ge(dfA.values).any()]
说明:dfA.values
返回形状为(720,1)
的numpy数组。然后dfB.ge(dfA.values)
将dfB
中的每一列与dfA
中的每一列进行比较;这将返回一个与dfB
大小相同的布尔数据框。最后,.any()
沿着布尔数据框的列检查是否有任何True
。
答案 1 :(得分:0)
这如何:
pd.DataFrame(np.where(A.to_numpy() <= B.to_numpy(),1,np.nan), columns=B.columns, index=A.index).dropna(how='all')
您并将np.nan
条件下的np.where
替换为所需的任何值,包括保留dataframe 'B'
的原始值