data = {40011 : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
40012 : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
40013 : [0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
40014 : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
alleles = pd.DataFrame.from_dict(data, orient='index')
In [333]: alleles
Out[333]:
0 1 2 3 4 5 6 7 8 9
40011 0 0 0 0 0 0 0 0 0 0
40012 0 0 0 0 0 0 0 0 0 0
40013 0 0 0 0 1 0 0 0 0 0
40014 0 0 0 0 0 0 0 0 0 0
Вы указали, что ваше отображение одного индекса работает, но ...
alleles[0] = alleles[0].map({'1' : 20, '0': 0})
In [335]: alleles
Out[335]:
0 1 2 3 4 5 6 7 8 9
40011 NaN 0 0 0 0 0 0 0 0 0
40012 NaN 0 0 0 0 0 0 0 0 0
40013 NaN 0 0 0 1 0 0 0 0 0
40014 NaN 0 0 0 0 0 0 0 0 0
Похоже, что вы сопоставляете str
, а не int
, содержащийся в кадре данных. Если вы измените отображение, результат будет более соответствовать желаемому результату. (сбросить фрейм данных)
alleles[0] = alleles[0].map({1 : 20, 0: 0}) #<-- note: no quotes around 1 or 0
alleles[4] = alleles[4].map({1 : 20, 0: 0}) #<-- note: no quotes around 1 or 0
In [340]: alleles
Out[340]:
0 1 2 3 4 5 6 7 8 9
40011 0 0 0 0 0 0 0 0 0 0
40012 0 0 0 0 0 0 0 0 0 0
40013 0 0 0 0 20 0 0 0 0 0
40014 0 0 0 0 0 0 0 0 0 0
Теперь, если мы применим это изменение отображения к вашему for loop
, мы получим (сбросить фрейм данных):
for i in alleles:
alleles[i] = alleles[i].map({1 : 20, 0: 0})
In [344]: alleles
Out[344]:
0 1 2 3 4 5 6 7 8 9
40011 0 0 0 0 0 0 0 0 0 0
40012 0 0 0 0 0 0 0 0 0 0
40013 0 0 0 0 20 0 0 0 0 0
40014 0 0 0 0 0 0 0 0 0 0
Единственный открытый вопрос тогда будет, если ваша Merged_transpose[1][0]
является проблемой - но нет способа узнать, не зная, что это такое и что он делает ...
обновление
После еще одной путаницы - ваша проблема связана с объектом Merged_transpose
и, скорее всего, с первым индексом вашего прохождения. После исправления словаря сопоставления он не проходит через KeyError: 1
независимо.