Python 从csv透视数据并存储在dataframe中

Python 从csv透视数据并存储在dataframe中,python,pandas,csv,dataframe,data-science,Python,Pandas,Csv,Dataframe,Data Science,我的要求如下: 我有一个包含以下数据的csv文件(这只是一个示例,数据要大得多): 我希望将数据保存在数据框中,以便列应为: A 01/02/1997 P L 12 B 01/02/1997 Q M 4 C 01/02/1997 R N 5 D 01/02/1997 S O 0 E 01/02/1997 T P 0 A 01/03/1998 P L 71 B 01/03/1998 Q

我的要求如下:

我有一个包含以下数据的csv文件(这只是一个示例,数据要大得多):

我希望将数据保存在数据框中,以便列应为:

 A   01/02/1997   P   L  12
 B   01/02/1997   Q   M   4
 C   01/02/1997   R   N   5
 D   01/02/1997   S   O   0
 E   01/02/1997   T   P   0
 A   01/03/1998   P   L  71
 B   01/03/1998   Q   M   2
 C   01/03/1998   R   N   4
 D   01/03/1998   S   O   8
 E   01/03/1998   T   P   0 

基本上第一列应该是旋转的。有人能帮忙吗?名称和数据只是示例(虚拟)

首先创建列中的
多索引
by
header=[0,1,2]
参数,然后将第一列按
index\u col=[0]
转换为索引:

详细信息

print (df.columns)
MultiIndex([('A', 'P', 'L'),
            ('B', 'Q', 'M'),
            ('C', 'R', 'N'),
            ('D', 'S', 'O'),
            ('E', 'T', 'P')],
           names=['xxxx', 'xxxx', 'DATE'])
然后按换位、重塑、排序,为多索引按创建标签,最后将
多索引系列
转换为
数据帧


pd.read_剪贴板(header=[0,1,2],sep='|').set_index(['xxxx']).unstack().reset_index()
方法是,知道哪一行是header,哪一列是index,设置它们,然后,
unstack
stack
取决于您需要什么。我只是举了一个例子,列号未知,就像目前在这个例子中一样,我只提供了5列abcde,但它们可以有更多不同的名称,所以不能真正形成一个multiindex@ayushgupta-您认为级别数未知吗?样本数据中有3个级别
A B C D E
P Q R S T
L M N O P
否,级别数是固定的,即3,如图所示。但列的数量并不是如此fixed@ayushgupta-如果标头具有与数据相同的分隔符,且长度相同,则其工作正常。应该有更多的值,仍然工作得很好。@ayushgupta-好的,如果有错误或问题,请告诉我。
df = pd.read_csv(filename, sep="|", header=[0,1,2], index_col=[0])
print (df)
xxxx         A  B  C  D  E
xxxx         P  Q  R  S  T
DATE         L  M  N  O  P
01/02/1997  12  4  5  0  0
01/03/1998  71  2  4  8  0
print (df.columns)
MultiIndex([('A', 'P', 'L'),
            ('B', 'Q', 'M'),
            ('C', 'R', 'N'),
            ('D', 'S', 'O'),
            ('E', 'T', 'P')],
           names=['xxxx', 'xxxx', 'DATE'])
df1 = (df.T
         .stack(dropna=False)
         .sort_index(level=3)
         .rename_axis(('a','b','c','d'))
         .reset_index(name='e'))
print (df1)
   a  b  c           d   e
0  A  P  L  01/02/1997  12
1  B  Q  M  01/02/1997   4
2  C  R  N  01/02/1997   5
3  D  S  O  01/02/1997   0
4  E  T  P  01/02/1997   0
5  A  P  L  01/03/1998  71
6  B  Q  M  01/03/1998   2
7  C  R  N  01/03/1998   4
8  D  S  O  01/03/1998   8
9  E  T  P  01/03/1998   0