使用Pandas将新数据框索引到新列中

时间:2019-07-18 02:25:05

标签: python python-3.x pandas numpy

我需要通过选择多个列,然后将现有列中的值附加到新列中并将其对应的索引作为新列,来从现有数据框中创建一个新数据框

所以,可以说我将其作为数据框:

A B C D E F
0 1 2 3 4 0
0 7 8 9 1 0
0 4 5 2 4 0

通过选择B到E列,将其转换为:

A index_value
1 1
7 1
4 1
2 2
8 2
5 2
3 3
9 3
2 3
4 4
1 4
4 4

因此,对于新数据帧,列A将是旧数据帧中列B through E的所有值,列index_value将对应于索引值[起始于零]。

我已经挠头好几个小时了。任何帮助将不胜感激,谢谢!

Python3,使用pandas和numpy库。

3 个答案:

答案 0 :(得分:0)

尝试使用:

df = pd.melt(df[['B', 'C', 'D', 'E']])
# Or df['variable'] = df[['B', 'C', 'D', 'E']].melt()
df['variable'].shift().eq(df['variable'].shift(-1)).cumsum().shift(-1).ffill()
print(df)

输出:

    variable  value
0        1.0      1
1        1.0      7
2        1.0      4
3        2.0      2
4        2.0      8
5        2.0      5
6        3.0      3
7        3.0      9
8        3.0      2
9        4.0      4
10       4.0      1
11       4.0      4

答案 1 :(得分:0)

这只是melt

df.columns = range(df.shape[1])
s = df.melt().loc[lambda x : x.value!=0]
s
    variable  value
3          1      1
4          1      7
5          1      4
6          2      2
7          2      8
8          2      5
9          3      3
10         3      9
11         3      2
12         4      4
13         4      1
14         4      4

答案 2 :(得分:0)

#Another way

    A   B   C   D   E   F
0   0   1   2   3   4   0
1   0   7   8   9   1   0
2   0   4   5   2   4   0

# Select columns to include

start_colum ='B'
end_column ='E'
index_column_name ='A'

#re-stack the dataframe

df = df.loc[:,start_colum:end_column].stack().sort_index(level=1).reset_index(level=0, drop=True).to_frame()

#Create the "index_value" column 

df['index_value'] =pd.Categorical(df.index).codes+1

df.rename(columns={0:index_column_name}, inplace=True)

df.set_index(index_column_name, inplace=True)

df

    index_value
A   
1   1
7   1
4   1
2   2
8   2
5   2
3   3
9   3
2   3
4   4
1   4
4   4