Как определить переменные значения до изменения формы от широкой к длинной? - PullRequest
0 голосов
/ 02 декабря 2018

Рассмотрим ниже df.Обратите внимание, что у пользователя Пола есть два цвета по сравнению с его именем.

df = pd.DataFrame({'names' :['Stacey', 'John', 'Paul'],
                  'blue':['blue',np.nan, np.nan],
                  'yellow':[np.nan, 'yellow', np.nan],
                  'green': [np.nan, np.nan, 'green'],
                   'purple':[np.nan, np.nan, 'purple' ]
                 })
print(df)


 names    blue  yellow   green   purple
0  Stacey  blue     NaN    NaN     NaN
1    John   NaN  yellow    NaN     NaN
2    Paul   NaN     NaN  green  purple

Если я хочу изменить этот df с широкого на длинный, с pd.melt, я буду ожидать, что запись id 'Paul' будет дублирована,

df.melt(id_vars='names',
        value_vars = ['blue','yellow','green','purple'],
        value_name = 'color').dropna().drop('variable', axis=1))

      names   color
0   Stacey    blue
4     John  yellow
8     Paul   green
11    Paul  purple

Как можно было бы изолировать / обнаружить повторяющиеся записи в исходной df, чтобы результат был?:

    names    blue  yellow   green   purple
 2    Paul   NaN     NaN    green   purple

Заранее спасибо:

панд0.23.4

python 3.7.1

1 Ответ

0 голосов
/ 02 декабря 2018

Вы можете использовать count для отсчета с исключением пропущенных значений с фильтрацией по boolean indexing:

df = df[df[['blue','yellow','green','purple']].count(axis=1) > 1]
print (df)
  names blue yellow  green  purple
2  Paul  NaN    NaN  green  purple

Подробности :

print (df[['blue','yellow','green','purple']].count(axis=1))
0    1
1    1
2    2
dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...