Как настроить Pandas для извлечения определенных строк определенных столбцов и укладывать их друг на друга? - PullRequest
1 голос
/ 30 апреля 2019

Как я могу извлечь определенные столбцы и строки, чтобы сложить их вместе?

Я создал простой примерный фрейм данных с этими данными:

data = {'d1':[101,201,301,401],
        'd2':[102,202,302,402],
        'd3':[103,203,303,403],
        'd4':[104,204,304,404]
        }

dfa = pd.DataFrame(data, index=['t1','t2','t3','t4'])
dfa
     d1   d2   d3   d4
t1  101  102  103  104
t2  201  202  203  204
t3  301  302  303  304
t4  401  402  403  404

Вот что я хотел бы получить:

   d1_d2_d3-t1-t2
1             101
2             201
3             102
4             202
5             103
6             203

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

   d1_d2_d3-t1-t2  d1_d2_d3-t3-t4
1             101             301
2             201             401
3             102             302
4             202             402
5             103             303
6             203             403

Заголовки в желаемых результатах только для объяснения

1 Ответ

1 голос
/ 30 апреля 2019

Используйте DataFrame.loc для фильтрации с DataFrame.melt для изменения формы:

idx = ['t1','t2']
cols = ['d1','d2', 'd3']
df = dfa.loc[idx, cols].melt(value_name='data')[['data']]

Другое решение - преобразовать значения в массив numpy, сгладить на numpy.ravel и создать новый DataFrame с помощью конструктора:

df = pd.DataFrame({'data': dfa.loc[idx, cols].values.ravel()})

print (df)
   data
0   101
1   201
2   102
3   202
4   103
5   203

idx1 = ['t1','t2']
idx2 = ['t3','t4']
cols = ['d1','d2', 'd3']
df = pd.concat([dfa.loc[idx1, cols].melt(value_name='data1')[['data1']],
                dfa.loc[idx2, cols].melt(value_name='data2')[['data2']]], axis=1)

Или:

df = pd.DataFrame({'data1': dfa.loc[idx1, cols].values.ravel(),
                   'data2': dfa.loc[idx2, cols].values.ravel()})

print (df)
   data1  data2
0    101    301
1    201    401
2    102    302
3    202    402
4    103    303
5    203    403
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...