我有以下数据帧:
df = {names:["CARL","HERMES","LEO"], srv:[234,123,44], mx_l1:[10,12,8], mx_l2:[20,8,10], mx_l3:[12,23,11], label:["street","city","apto"]}但是长度列(mx_l1、mx_l2、mx_l3)必须垂直排列,所以我保证它们与当前列的顺序。
我如何连续地对这些列进行排序,而不是放在单个列中,如下所示
name |srv|max_lenght|label
CARL |234|10 |street
CARL |234|20 |city
CARL |234|12 |apto
HERMES|123|12 |street
HERMES|234|8 |city
HERMES|234|23 |apto我的代码
df2 = df.melt(id_vars=["srv", "name"],
value_vars=["max_l1", "max_l2", "max_l3"],
value_name="max_lenght")\
.sort_values(by="srv")\
.drop("variable", axis=1)\
.reset_index(drop=True)发布于 2020-11-03 05:11:53
IIUC,这是你想要的:
df = (
df.melt(
id_vars=["names", "srv", "label"],
value_vars=["mx_l1", "mx_l2", "mx_l3"],
value_name="max_length",
)
.sort_values(["names", "srv", "max_length"])
.drop(columns="variable")
.reset_index(drop=True)
)
print(df)
names srv label max_length
0 CARL 234 street 10
1 CARL 234 street 12
2 CARL 234 street 20
3 HERMES 123 city 8
4 HERMES 123 city 12
5 HERMES 123 city 23
6 LEO 44 apto 8
7 LEO 44 apto 10
8 LEO 44 apto 11发布于 2020-11-03 05:15:04
使用set_index和stack
df_final = (df.set_index(['names','srv','label']).stack().droplevel(-1)
.rename_axis(index={'label':'max_length'})
.reset_index(name='label'))
Out[31]:
names srv max_length label
0 CARL 234 street 10
1 CARL 234 street 20
2 CARL 234 street 12
3 HERMES 123 city 12
4 HERMES 123 city 8
5 HERMES 123 city 23
6 LEO 44 apto 8
7 LEO 44 apto 10
8 LEO 44 apto 11https://stackoverflow.com/questions/64653293
复制相似问题