IIUC, bạn có thể sử dụng pandas.Index.difference
để lấy tất cả các cột của khung dữ liệu không có trong danh sách được chỉ định của bạn.
Một chút của một ví dụ vô nghĩa, nhưng:
df = pd.DataFrame[data=np.random.randn[5,10],
columns=['a','b','c','d','e','f','g','h','i','j']]
val_vars = ['e','f','g']
other_vars = df.columns.difference[val_vars]
df.melt[id_vars=other_vars, value_vars=val_vars]
Một cách tiếp cận thay thế không sử dụng chức năng dành riêng cho gấu trúc sẽ là sử dụng các bộ:
other_vars = set[df.columns] - set[val_vars]
4 hữu ích 0 bình luận chia sẻ
Unpivot a DataFrame from wide to long format, optionally leaving identifiers set.
This function is useful to massage a DataFrame into a format where one or more columns are identifier variables [id_vars], while all other columns, considered measured variables [value_vars], are “unpivoted” to the row axis, leaving just two non-identifier columns, ‘variable’ and ‘value’.
Parametersid_varstuple, list, or ndarray, optionalColumn[s] to use as identifier variables.
value_varstuple, list, or ndarray, optionalColumn[s] to unpivot. If not specified, uses all columns that are not set as id_vars.
var_namescalarName to use for the ‘variable’
column. If None it uses frame.columns.name
or ‘variable’.
Name to use for the ‘value’ column.
col_levelint or str, optionalIf columns are a MultiIndex then use this level to melt.
ignore_indexbool, default TrueIf True, original index is ignored. If False, the original index is retained. Index labels will be repeated as necessary.
New in version 1.1.0.
ReturnsDataFrameUnpivoted DataFrame.
Notes
Reference the user guide for more examples.
Examples
>>> df = pd.DataFrame[{'A': {0: 'a', 1: 'b', 2: 'c'}, ... 'B': {0: 1, 1: 3, 2: 5}, ... 'C': {0: 2, 1: 4, 2: 6}}] >>> df A B C 0 a 1 2 1 b 3 4 2 c 5 6
>>> pd.melt[df, id_vars=['A'], value_vars=['B']] A variable value 0 a B 1 1 b B 3 2 c B 5
>>> pd.melt[df, id_vars=['A'], value_vars=['B', 'C']] A variable value 0 a B 1 1 b B 3 2 c B 5 3 a C 2 4 b C 4 5 c C 6
The names of ‘variable’ and ‘value’ columns can be customized:
>>> pd.melt[df, id_vars=['A'], value_vars=['B'], ... var_name='myVarname', value_name='myValname'] A myVarname myValname 0 a B 1 1 b B 3 2 c B 5
Original index values can be kept around:
>>> pd.melt[df, id_vars=['A'], value_vars=['B', 'C'], ignore_index=False] A variable value 0 a B 1 1 b B 3 2 c B 5 0 a C 2 1 b C 4 2 c C 6
If you have multi-index columns:
>>> df.columns = [list['ABC'], list['DEF']] >>> df A B C D E F 0 a 1 2 1 b 3 4 2 c 5 6
>>> pd.melt[df, col_level=0, id_vars=['A'], value_vars=['B']] A variable value 0 a B 1 1 b B 3 2 c B 5
>>> pd.melt[df, id_vars=[['A', 'D']], value_vars=[['B', 'E']]] [A, D] variable_0 variable_1 value 0 a B E 1 1 b B E 3 2 c B E 5