Как записать функцию, которая переводит столбцы моего информационного кадра в один столбец? - PullRequest
1 голос
/ 15 апреля 2020

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

A =   ID Material1 Materia2 Material3 
      14   0        0        0
      24   1        0        0 
      12   1        1        0
      25   0        0        2

Я хочу, чтобы вся информация в одном столбце была такой:

A =   ID  Materials
      14   Nan 
      24   Material1
      12   Material1 
      12   Material2
      25   Material3 
      25   Material3 

Может кто-нибудь помочь написать функцию, пожалуйста!

1 Ответ

1 голос
/ 15 апреля 2020

Используйте DataFrame.melt с повторяющимися строками по счетам с Index.repeat и DataFrame.loc:

df1 = df.melt('ID', var_name='Materials')
df1 = df1.loc[df1.index.repeat(df1['value'])].drop('value', axis=1).reset_index(drop=True)
print (df1)
   ID  Materials
0  24  Material1
1  12  Material1
2  12   Materia2
3  25  Material3
4  25  Material3

РЕДАКТИРОВАТЬ: Только для добавления 0 Материалы с пропущенными значениями используют DataFrame.merge с левым соединением оригинала df['ID'] в одном столбце DataFrame без дублирования на DataFrame.drop_duplicates:

df1 = df.melt('ID', var_name='Materials')

df0 = df[['ID']].drop_duplicates()
print (df0)
   ID
0  14
1  24
2  12
3  25

df2 = df1.loc[df1.index.repeat(df1['value'])].drop('value', axis=1).reset_index(drop=True)

df2 = df0.merge(df2, on='ID', how='left')
print (df2)
   ID  Materials
0  14        NaN
1  24  Material1
2  12  Material1
3  12   Materia2
4  25  Material3
5  25  Material3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...