Khi xếp chồng gấu trúc DataFrame
, trả lại Series
. Thông thường sau khi tôi xếp chồng DataFrame
, tôi chuyển nó trở lại thành DataFrame
. Tuy nhiên, tên mặc định đến từ các dữ liệu xếp chồng lên nhau làm cho việc đổi tên các cột một chút bị hack. Những gì tôi đang tìm kiếm là một cách dễ dàng hơn/xây dựng trong để cung cấp cho các cột hợp lý tên sau khi xếp chồng.Đặt tên cột khi xếp chồng gấu trúc DataFrame
Ví dụ, sau DataFrame
:
In [64]: df = pd.DataFrame({'id':[1,2,3],
...: 'date':['2015-09-31']*3,
...: 'value':[100, 95, 42],
...: 'value2':[200, 57, 27]}).set_index(['id','date'])
In [65]: df
Out[65]:
value value2
id date
1 2015-09-31 100 200
2 2015-09-31 95 57
3 2015-09-31 42 27
tôi ngăn xếp và chuyển đổi nó trở lại một DataFrame
như vậy:
In [68]: df.stack().reset_index()
Out[68]:
id date level_2 0
0 1 2015-09-31 value 100
1 1 2015-09-31 value2 200
2 2 2015-09-31 value 95
3 2 2015-09-31 value2 57
4 3 2015-09-31 value 42
5 3 2015-09-31 value2 27
Vì vậy, để đặt tên cho các cột một cách thích hợp tôi sẽ cần phải làm một cái gì đó như thế này:
In [72]: stacked = df.stack()
In [73]: stacked
Out[73]:
id date
1 2015-09-31 value 100
value2 200
2 2015-09-31 value 95
value2 57
3 2015-09-31 value 42
value2 27
dtype: int64
In [74]: stacked.index.set_names('var_name', level=len(stacked.index.names)-1, inplace=True)
In [88]: stacked.reset_index().rename(columns={0:'value'})
Out[88]:
id date var_name value
0 1 2015-09-31 value 100
1 1 2015-09-31 value2 200
2 2 2015-09-31 value 95
3 2 2015-09-31 value2 57
4 3 2015-09-31 value 42
5 3 2015-09-31 value2 27
Lý tưởng nhất, các giải pháp sẽ giống như thế này:
df.stack(new_index_name='var_name', new_col_name='value')
Nhưng nhìn vào docs nó không giống như stack
mất bất kỳ đối số như vậy. Có cách nào dễ dàng hơn/được xây dựng trong gấu trúc để đối phó với quy trình làm việc này không?
+1 nhưng một chút xây dựng sẽ là lý tưởng. Cũng có thể vốn bắt đầu các tên cột như tôi đã nhầm lẫn với rất nhiều 'giá trị' s về. – josh