我创建了以下名为btn.setOnclicklistener(new View.OnClickListener(){
@Override
public void onClick(View v) {
String URLIMAGE = "https://www.avansys.edu.pe/sites/default/files/"+et_num.getText().toString()+".png";
new GetImageFromURL(img).execute(URLIMAGE);
}
});
的数据框
df
我现在想要的是翻转行,以使df像这样:
col1 col2 col3
0 4 5 2
1 5 2 4
2 3 10 3
3 6 2 2
4 3 2 4
我认为我需要使用stack(),但不确定如何使用。我尝试了以下
column_name value
0 col1 4
1 col2 5
2 col3 2
3 col1 5
4 col2 2
5 col3 4
... ... ...
但是会返回以下错误
df = df.stack().rename_axis(['column_name']).reset_index(name = 'value')
问题:如何堆叠值,以便获得所需的数据框?
答案 0 :(得分:6)
在这里有必要使用reset_index
和drop=True
来删除MultiIndex的第一级:
df = (df.stack()
.reset_index(level=0, drop=True)
.rename_axis(['column_name'])
.reset_index(name = 'value'))
print (df)
column_name value
0 col1 4
1 col2 5
2 col3 2
3 col1 5
4 col2 2
5 col3 4
6 col1 3
7 col2 10
8 col3 3
9 col1 6
10 col2 2
11 col3 2
12 col1 3
13 col2 2
14 col3 4
另一个解决方案是melt
,值的顺序已更改:
df = df.melt(var_name='column_name')
print (df)
column_name value
0 col1 4
1 col1 5
2 col1 3
3 col1 6
4 col1 3
5 col2 5
6 col2 2
7 col2 10
8 col2 2
9 col2 2
10 col3 2
11 col3 4
12 col3 3
13 col3 2
14 col3 4
答案 1 :(得分:1)
如果行的顺序不重要,则可以直接使用pd.melt
:
res = pd.melt(df, var_name='column_name')
如果希望按输入行进行排序,则可以将pd.melt
与reset_index
结合使用,以将索引提升到一系列,然后使用sort_values
:
res = pd.melt(df.reset_index(), id_vars='index', var_name='column_name')\
.sort_values('index').drop('index', 1).reset_index(drop=True)
print(res)
column_name value
0 col1 4
1 col2 5
2 col3 2
3 col1 5
4 col2 2
5 col3 4
6 col1 3
7 col2 10
8 col3 3
9 col1 6
10 col2 2
11 col3 2
12 col1 3
13 col2 2
14 col3 4