Логический фильтр Dataframe для другого Dataframe - PullRequest
0 голосов
/ 20 сентября 2018

Следующий фрейм данных df1 содержит числовые значения

   IDs          Value1      Value2        Value     Value4
   AB              1          1             1       5
   BC              2          2             2       3
   BG              1          1             4       1
   RF              2          2             2       7

, а этот фрейм данных df2 содержит логические значения:

   Index          0                1             2         3
   1              True           False          True       True
   2              False          False          True       False
   3              False          False          True       False
   4              False          False          False      False

с тем же количеством столбцов и строк.

Мне нужно поднастроить df1 следующим образом: получить только столбцы, которые в df2 имеют хотя бы значение True.

Значение следующего:

   IDs          Value1         Value3     Value4
   AB              1              1       5
   BC              2              2       3
   BG              1              4       1
   RF              2              2       7

Я попробовал следующий код:

df2_true = np.any(df2,axis=1)

Однако строка выше возвращает список, который не может быть использован здесь:

result = df1[:,df2_true]

Любая помощь будетдобро пожаловать

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Я думаю, что это будет работать

df1.loc[:,df2.any(0).values.tolist()]
Out[741]: 
     Value1  Value  Value4
IDs                       
AB        1      1       5
BC        2      2       3
BG        1      4       1
RF        2      2       7
0 голосов
/ 20 сентября 2018

Вы уже в правильном направлении, однако, поскольку вы заинтересованы в маскировании столбцов, вам просто нужно применить операцию np.any () к другой оси, а затем применить вашу логическую маску к атрибуту столбцов исходного кадра данных:

masked_df = df1.columns[df2.any(axis=0)]
0 голосов
/ 20 сентября 2018

Использование loc с np.any на index (axis=0):

result = df1.loc[:, np.any(df2.values,axis=0)]
print (result)
     Value1  Value  Value4
IDs                       
AB        1      1       5
BC        2      2       3
BG        1      4       1
RF        2      2       7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...