我有一个要求:
我有一个包含以下数据的 csv 文件(这只是示例,数据要大得多):
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
我想将数据保存在数据框中,以便列应该是:
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
基本上第一列应该旋转。有人可以帮忙吗?名称和数据只是示例(虚拟)
最佳答案
首先创建MultiIndex in columns
通过header=[0,1,2]
参数并将第一列转换为索引 index_col=[0]
在 read_csv
:
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'])
然后转置为 DataFrame.T
, reshape DataFrame.stack
,排序依据 DataFrame.sort_index
,通过 DataFrame.rename_axis
为MultiIndex创建标签最后转换MultiIndex Series
至DataFrame
通过 Series.reset_index
:
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
关于python - 来自 csv 的数据透视并存储在数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60370331/