замена значений словаря в фрейм данных - PullRequest
0 голосов
/ 28 июня 2018

У меня есть следующее df на одной стороне:

          ACCOR SA  ADMIRAL  ADECCO  BANKIA  BANKINTER
ADMIRAL         0        0       0       0          0
ADECCO          0        0       0       0          0
BANKIA          0        0       0       0          0

и следующие dict на другом:

{'ADMIRAL': 1, 'ADECCO': -1, 'BANKIA': -1}

, где df.index значения соответствуют dict.keys

Я хотел бы заменить dict.values на df, поместив одно значение в строку, чтобы получить этот вывод:

          ACCOR SA  ADMIRAL  ADECCO  BANKIA  BANKINTER
ADMIRAL         0        1       0       0          0
ADECCO          0        0      -1       0          0
BANKIA          0        0       0      -1          0

1 Ответ

0 голосов
/ 28 июня 2018

Цикл по значениям dict и установка значений по at:

d = {'ADMIRAL': 1, 'ADECCO': -1, 'BANKIA': -1}

for k, v in d.items():
    df.at[k, k] = v
    #alternative
    #df.loc[k, k] = v
print (df)
         ACCOR SA  ADMIRAL  ADECCO  BANKIA  BANKINTER
ADMIRAL         0        1       0       0          0
ADECCO          0        0      -1       0          0
BANKIA          0        0       0      -1          0

Другое решение - создать DataFrame на dict на MultiIndex.from_arrays и unstack:

s = pd.Series(list(d.values()), index=pd.MultiIndex.from_arrays([d.keys(), d.keys()]))
df1 = s.unstack()
print (df1)
         ADECCO  ADMIRAL  BANKIA
ADECCO     -1.0      NaN     NaN
ADMIRAL     NaN      1.0     NaN
BANKIA      NaN      NaN    -1.0

А затем заменить не NaN s на combine_first:

df = df1.combine_first(df)
print (df)
         ACCOR SA  ADECCO  ADMIRAL  BANKIA  BANKINTER
ADECCO        0.0    -1.0      0.0     0.0        0.0
ADMIRAL       0.0     0.0      1.0     0.0        0.0
BANKIA        0.0     0.0      0.0    -1.0        0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...