заменить клетки с кортежем - PullRequest
       3

заменить клетки с кортежем

0 голосов
/ 21 сентября 2019

Как получить кортеж, состоящий как из элемента index, так и самого текущего элемента:

со следующим кодом:

import numpy as np
import pandas as pd
df = pd.DataFrame([[None, 'y', None], [None, None, 'x'], ['z', None, None]],
                  index=['a', 'b', 'c'],
                  columns=['X', 'Y', 'Z'])
print(f'\n{df.to_string()}')

Я получу:

      X     Y     Z
a  None     y  None
b  None  None     x
c     z  None  None

Мне хотелось бы получить следующее:

      X     Y     Z
a  None  (a,y)  None
b  None  None  (b,x)
c  (c,z) None  None

Довольно грубая попытка решить эту проблему приводит к ошибке о .name:

df2 = df.mask(pd.isnull, lambda x: (x,x.name))
print(f'\n{df2.to_string()}')

1 Ответ

3 голосов
/ 21 сентября 2019

Попробуйте использовать df.agg и zip и нарезку кадра данных

df.agg(lambda x: list(zip(df.index, x)))[df.notna()]

Out[928]:
        X       Y       Z
a     NaN  (a, y)     NaN
b     NaN     NaN  (b, x)
c  (c, z)     NaN     NaN

Примечание : я думаю, что NaN представление лучше, чем None, поэтому яоставьте это как NaN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...