如何将特定列转置为 pandas 中的行关联其他列值
How To transpose specific columns into rows in pandas associate other column value
您好,我正在尝试在 pandas 中进行转置操作,但条件是一列的值应与转置后的行相关联。
下面给出的示例将解释更好的方法:
数据看起来像:
A 1 2 3 4 51 52 53 54
B 11 22 23 24 71 72 73 74
我尝试这样做的结果:
A 1 51
A 2 52
A 3 53
A 4 54
B 11 71
B 22 72
B 23 73
B 24 74
在第一行中,数据在单行中,我想将数据从 1 转置为 4,其他列中的值为 'A'。谁能建议我该怎么做?
print (df)
0 1 2 3 4
0 A 1 2 3 4
1 B 11 22 23 24
df1 = pd.melt(df, id_vars=0).drop('variable', axis=1).sort_values(0)
df1.columns = list('ab')
print (df1)
a b
0 A 1
2 A 2
4 A 3
6 A 4
1 B 11
3 B 22
5 B 23
7 B 24
df2 = df.set_index(0).stack().reset_index(level=1, drop=True).reset_index(name='a')
df2.columns = list('ab')
print (df2)
a b
0 A 1
1 A 2
2 A 3
3 A 4
4 B 11
5 B 22
6 B 23
7 B 24
通过评论编辑:
#set index with first column
df = df.set_index(0)
#create MultiIndex
cols = np.arange(len(df.columns))
df.columns = [ cols // 4, cols % 4]
print (df)
0 1
0 1 2 3 0 1 2 3
0
A 1 2 3 4 51 52 53 54
B 11 22 23 24 71 72 73 74
#stack, reset index names, remove level and reset index
df1 = df.stack().rename_axis((None, None)).reset_index(level=1, drop=True).reset_index()
#set new columns names
df1.columns = ['a','b','c']
print (df1)
a b c
0 A 1 51
1 A 2 52
2 A 3 53
3 A 4 54
4 B 11 71
5 B 22 72
6 B 23 73
7 B 24 74
您好,我正在尝试在 pandas 中进行转置操作,但条件是一列的值应与转置后的行相关联。 下面给出的示例将解释更好的方法: 数据看起来像:
A 1 2 3 4 51 52 53 54 B 11 22 23 24 71 72 73 74
我尝试这样做的结果:
A 1 51 A 2 52 A 3 53 A 4 54 B 11 71 B 22 72 B 23 73 B 24 74
在第一行中,数据在单行中,我想将数据从 1 转置为 4,其他列中的值为 'A'。谁能建议我该怎么做?
print (df)
0 1 2 3 4
0 A 1 2 3 4
1 B 11 22 23 24
df1 = pd.melt(df, id_vars=0).drop('variable', axis=1).sort_values(0)
df1.columns = list('ab')
print (df1)
a b
0 A 1
2 A 2
4 A 3
6 A 4
1 B 11
3 B 22
5 B 23
7 B 24
df2 = df.set_index(0).stack().reset_index(level=1, drop=True).reset_index(name='a')
df2.columns = list('ab')
print (df2)
a b
0 A 1
1 A 2
2 A 3
3 A 4
4 B 11
5 B 22
6 B 23
7 B 24
通过评论编辑:
#set index with first column
df = df.set_index(0)
#create MultiIndex
cols = np.arange(len(df.columns))
df.columns = [ cols // 4, cols % 4]
print (df)
0 1
0 1 2 3 0 1 2 3
0
A 1 2 3 4 51 52 53 54
B 11 22 23 24 71 72 73 74
#stack, reset index names, remove level and reset index
df1 = df.stack().rename_axis((None, None)).reset_index(level=1, drop=True).reset_index()
#set new columns names
df1.columns = ['a','b','c']
print (df1)
a b c
0 A 1 51
1 A 2 52
2 A 3 53
3 A 4 54
4 B 11 71
5 B 22 72
6 B 23 73
7 B 24 74