Сравнение данных между пандами DataFrame и словарем - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь провести сравнение между словарем и пандой DataFrame.

DataFrame выглядит следующим образом:

      A      B     C
0    'a'    'x'    0
1    'b'    'y'    1
2    'c'    'z'    4

Словарь выглядит следующим образом:

{
'a-x': [1],
'b-y': [2],
'c-z': [3]
}

Цель состоит в том, чтобы использовать ключи словаря для определения совпадающих строк в кадре данных (ключ 'ax' соответствует индексу 0 столбца A и столбца B), а затем идентифицировать данные в кадре DataFrame в столбце C, который больше, чем связанныйзначение словаря.

Итак:

key 'a-x' matches index 0 of column A and column B, but value of 0 in C is less than 1 > exclude
key 'b-y' matches index 1 of column A and column B, but value of 1 in C is less than 2 > exclude
key 'c-z' matches index 2 of column A and column B, and value of 4 in C is greater than 3 > include

Отфильтрованный DataFrame будет включать только запись с индексом 2 и будет выглядеть следующим образом:

      A      B     C
2    'c'    'z'    4

В случаеЕсть некоторые детали, которые имеют значение, это образец моих фактических данных

DataFrame:

    Chrom   Loc         WT  Var Change  ConvChange  AO  DP  VAF IntEx    Gene   Upstream    Downstream  Individual  ID
0   chr1    115227854   T   A   T>A     T>A         2   17224   0.0116117   TIII    TIIIa   NaN NaN 1   113.fastq/onlyProbedRegions.vcf

Словарь:

rates =
{
    'chr1-115227854-T-A': [0.0032073647185113397]
}

Код:

return df[(df.Chrom+'-'+str(df.Loc)+'-'+df.WT+'-'+df.Var).map(pd.Series(rates).str[0])<df.VAF]

1 Ответ

0 голосов
/ 22 мая 2018

Создайте pd.Series, затем с помощью map создайте логический индекс

d={
'a-x': [1],
'b-y': [2],
'c-z': [3]
}
pd.Series(d)
Out[335]:
a-x    [1]
b-y    [2]
c-z    [3]
dtype: object


df[(df.A+'-'+df.B).map(pd.Series(d).str[0])<df.C]
Out[340]: 
   A  B  C
2  c  z  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...