Столбцы со строками в панд
Я пытаюсь выполнить следующую операцию в pandas
. Есть предложения по pandas
способу сделать это?
In [1]: input = pd.DataFrame({"X_1": [1], "X_2": [2], "X_3": [5], "Y_1": [1.2], "Y_2": [2.3], "Y_3": [3.4]})
In [2]: input
Out[2]:
X_1 X_2 X_3 Y_1 Y_2 Y_3
0 1 2 5 1.2 2.3 3.4
In [3]: output = pd.DataFrame({"X": [1,2,5], "Y": [1.2, 2.3, 3.4]})
In [4]: output
Out[4]:
X Y
0 1 1.2
1 2 2.3
2 5 3.4
4 ответа:
Используйте
str.split
иstack
.df.columns = df.columns.str.split('_', expand=True) df.stack().loc[0] X Y 1 1 1.2 2 2 2.3 3 5 3.4
Примечание: индекс-это
[1, 2, 3]
, соответствующий исходным столбцам.
Вероятно, не лучший ответ, но вы можете сделать следующее:
a = {"X_1": [1], "X_2": [2], "X_3": [5], "Y_1": [1.2], "Y_2": [2.3], "Y_3": [3.4]} x = [a[key][0] for key in sorted(a.keys()) if 'X' in key] y = [a[key][0] for key in sorted(a.keys()) if 'Y' in key] df = pd.DataFrame([x, y]).T
Уступка:
0 1 0 1.0 1.2 1 2.0 2.3 2 5.0 3.4
Вы можете сначала
split
столбцы по_
и создатьunique
значенияa
иb
. Затем создайтеMultiIndex.from_product
и ещеstack
:cols = input.columns.str.split('_') print (cols) Index([['X', '1'], ['X', '2'], ['X', '3'], ['Y', '1'], ['Y', '2'], ['Y', '3']], dtype='object') a = cols.str[0].unique() print (a) ['X' 'Y'] b = cols.str[1].unique() print (b) ['1' '2' '3'] input.columns = pd.MultiIndex.from_product([a,b]) print (input.stack(1).reset_index(drop=True)) X Y 0 1 1.2 1 2 2.3 2 5 3.4
Для такого рода вещей я предпочитаю
melt
, за которым следует строковая операция, а затемpivot
:df = pd.melt(input) df[['column', 'index']] = df['variable'].str.split('_', expand=True) df = df.pivot(index='index', columns='column', values='value') print(df)
Вывод:
column X Y index 1 1.0 1.2 2 2.0 2.3 3 5.0 3.4