Датафрейм плавится и сохраняет индекс - PullRequest
2 голосов
/ 30 марта 2020

У меня есть такой фрейм данных:

    df = pd.DataFrame(
        [
            ["True", "False"],
            ["True", "True"],
            ["False", "True"],

        ],
        index=["bob", "sue", "joe"],
        columns=["R1", "R2"],
    )

Я бы хотел растопить df, чтобы использовались имена индексов, и заменить Trues именем столбца, чтобы вывод был таким :

    df = pd.DataFrame(
        [
            ["bob", "R1"],
            ["sue", "R1"],
            ["sue", "R2"],
            ["joe", "R2"],
        ],
        columns=["Names", "Role"],
    )

Как мне этого добиться?

1 Ответ

2 голосов
/ 30 марта 2020

Используйте DataFrame.melt с первым преобразованием индекса в столбец:

df = df.rename_axis('Names').reset_index().melt('Names', var_name='Role')

, а затем фильтруйте по True значению:

df = df.loc[df['value'].map({'True':True, 'False':False}), ['Names','Role']]

Или:

df = df.loc[df['value'] == 'True', ['Names','Role']]

print(df)  
  Names Role
0   bob   R1
1   sue   R1
4   sue   R2
5   joe   R2
...