Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Pandas将多列合并为一个指示符?_Python_Pandas - Fatal编程技术网

Python 如何使用Pandas将多列合并为一个指示符?

Python 如何使用Pandas将多列合并为一个指示符?,python,pandas,Python,Pandas,我有数据集: Class 2000 2001 2002 2003 A 1 2 3 4 B 5 5 4 4 C 2 1 5 6 我想得到这样的结果: Class Year Value A 2000 1 A 2001 2 A 2002 3 A 2003 4 B 2000 5 B 2001 5 B 2002 4 B 2003 4 C 20

我有数据集:

Class   2000    2001    2002    2003
A   1   2   3   4
B   5   5   4   4
C   2   1   5   6
我想得到这样的结果:

Class   Year    Value
A   2000    1
A   2001    2
A   2002    3
A   2003    4
B   2000    5
B   2001    5
B   2002    4
B   2003    4
C   2000    2
C   2001    1
C   2002    5
C   2003    6

请帮帮我

您正在寻找取消数据帧的轴心,在Pandas中,他们称之为“Pandas.melt”

例如:

pandas.melt(df, id_vars=['Class'], value_vars=['2000','2001','2002','2003'])

您希望取消数据帧的轴心,在Pandas中,他们称之为“Pandas.melt”

例如:

pandas.melt(df, id_vars=['Class'], value_vars=['2000','2001','2002','2003'])
你可以和我一起使用

由于执行
sort\u values()
操作会使索引变得混乱,因此您需要先对索引进行排序,然后再对列进行排序

import pandas as pd
from io import StringIO

d = '''Class   2000    2001    2002    2003
A   1   2   3   4
B   5   5   4   4
C   2   1   5   6'''

df = pd.read_csv(StringIO(d), sep='\s+')

df2 = pd.melt(df, id_vars=['Class'], value_vars=['2000','2001','2002','2003']).sort_values(by=['Class'])
df2 = df2.reset_index(drop=True)

df2 = df2.rename(columns={'variable':'Year'})
print(df2)

# output
  Class  Year  value
0      A  2000      1
1      A  2001      2
2      A  2002      3
3      A  2003      4
4      B  2000      5
5      B  2001      5
6      B  2002      4
7      B  2003      4
8      C  2000      2
9      C  2001      1
10     C  2002      5
11     C  2003      6
联机检查链接:

您可以与一起使用

由于执行
sort\u values()
操作会使索引变得混乱,因此您需要先对索引进行排序,然后再对列进行排序

import pandas as pd
from io import StringIO

d = '''Class   2000    2001    2002    2003
A   1   2   3   4
B   5   5   4   4
C   2   1   5   6'''

df = pd.read_csv(StringIO(d), sep='\s+')

df2 = pd.melt(df, id_vars=['Class'], value_vars=['2000','2001','2002','2003']).sort_values(by=['Class'])
df2 = df2.reset_index(drop=True)

df2 = df2.rename(columns={'variable':'Year'})
print(df2)

# output
  Class  Year  value
0      A  2000      1
1      A  2001      2
2      A  2002      3
3      A  2003      4
4      B  2000      5
5      B  2001      5
6      B  2002      4
7      B  2003      4
8      C  2000      2
9      C  2001      1
10     C  2002      5
11     C  2003      6

在线检查链接:

我在一个带有pandas功能的方法链中创建了它

df = df.set_index('Class').unstack().reset_index().rename(columns={'level_0':'Year', 0:'Value'}).sort_values(['Class','Year']).reset_index(drop=True)

df
Year    Class   Value
0   2000    A   1
1   2001    A   2
2   2002    A   3
3   2003    A   4
4   2000    B   5
5   2001    B   5
6   2002    B   4
7   2003    B   4
8   2000    C   2
9   2001    C   1
10  2002    C   5
11  2003    C   6

我在一个带有pandas特性的方法链中创建了它

df = df.set_index('Class').unstack().reset_index().rename(columns={'level_0':'Year', 0:'Value'}).sort_values(['Class','Year']).reset_index(drop=True)

df
Year    Class   Value
0   2000    A   1
1   2001    A   2
2   2002    A   3
3   2003    A   4
4   2000    B   5
5   2001    B   5
6   2002    B   4
7   2003    B   4
8   2000    C   2
9   2001    C   1
10  2002    C   5
11  2003    C   6

欢迎收看StackOverflow!您应该知道,StackOverflow不是由其他人为您编写代码,而是根据您已经完成的工作获得帮助。如果你有一些你写的代码,你可以编辑你的文章来添加它。这将是非常有帮助的人在这里帮助你。欢迎在StackOverflow!您应该知道,StackOverflow不是由其他人为您编写代码,而是根据您已经完成的工作获得帮助。如果你有一些你写的代码,你可以编辑你的文章来添加它。这里的人帮助你会很有帮助的。