假设我有以下数据帧,我想选择任何一行,其中任何一个值等于列表中的任何项:^{{cd1>}
>>> import pandas as pd
>>> d1=pd.DataFrame([['A','B','C','D'],['D','Q','S', np.nan],['R',np.nan,np.nan,np.nan],[np.nan,'A',np.nan,np.nan]],columns=['Code1','Code2','Code3','Code4'])
>>> d1
Code1 Code2 Code3 Code4
0 A B C D
1 D Q S NaN
2 R NaN NaN NaN
3 NaN A NaN NaN
>>>
这可以通过一行代码轻松完成:
^{pr2}$但是,假设我有以下第二个数据帧索引,与第一个为该子集添加条件的数据帧相同。
^{pr3}$现在,我只想从d1中选择一个行,它们的任何值都等于我的列表中的任何时间,并且它们对应的“CodeStatus”(从d2)等于1。并且根据相应的代码状态I表示(Code1、CodeStatus1)、(Code2、CodeStatus 2)等的对
我有一个笨拙的方法来完成这一点,这需要遍历4个代码和代码状态中的每一个。见下表:
^{pr4}$如您所见,记录1现在从数据帧中删除,因为它有一列代码为“D”,但该代码的代码状态不等于1。
是否有一种更优雅的方法来实现这个查询,而不需要遍历每个列?
您可以通过以下方式实现:
d1[pd.DataFrame((d1.isin(CodesOfInterest)==True).values*(d2==1).values).any(1)]
相关问题 更多 >
编程相关推荐