使用python将“重复的”2D数组转换为矩阵

时间:2016-12-14 07:51:27

标签: python pandas numpy matrix transformation

我有一个文本文件,其中包含以下形式的信息:

A  0 0 1 ...
B  1 0 0 ...
C  4 2 2 ...
D  0 1 0 ...
E  1 1 0 ...

请注意,ABCDE循环的总数(此处仅显示3个)在不计算的情况下是未知的。 我想使用Python将其转换为具有以下形式的矩阵:

[Test, Description("Create Account"), Category("Account")]
public void AccountDocumentIDGet()
{        
   Assert.That (res.ResponseStatus.Message, Is.EqualTo("OK"), "Account was not created");
   Assert.That (res.User.Name, Is.EqualTo("Name"));
   Assert.That (res.User.Nationality, Is.EqualTo("US"));
}

我不确定进行此类转换的最佳方式是什么,有人作为python脚本执行此操作吗? Numpy或Pandas中是否有任何功能可以轻松实现?或者我应该在没有Numpy或Pandas的情况下这样做?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

熊猫解决方案:

import pandas as pd
from pandas.compat import StringIO

temp=u"""
A  0
B  1
C  4
D  0
E  1
A  0
B  0
C  2
D  1
E  1
A  1
B  0
C  2
D  0
E  0"""
#after testing replace StringIO(temp) to filename
df = pd.read_csv(StringIO(temp), sep="\s+", header=None)
print (df)
    0  1
0   A  0
1   B  1
2   C  4
3   D  0
4   E  1
5   A  0
6   B  0
7   C  2
8   D  1
9   E  1
10  A  1
11  B  0
12  C  2
13  D  0
14  E  0
df = pd.pivot(index=df[0], columns=df.groupby(0).cumcount(), values=df[1])
print (df)
   0  1  2
0         
A  0  0  1
B  1  0  0
C  4  2  2
D  0  1  0
E  1  1  0

答案 1 :(得分:1)

选项1
添加索引级别unstack

s.index = [s.index, np.arange(len(s)) // 5]
s.unstack()

enter image description here

选项2
重建

pd.DataFrame(s.values.reshape(5, -1), s.index[:5])

enter image description here

<强> 设置
我假设一个索引作为第一列的系列。

import pandas as pd
from pandas.compat import StringIO

txt = """A  0
B  1
C  4
D  0
E  1
A  0
B  0
C  2
D  1
E  1
A  1
B  0
C  2
D  0
E  0"""
s = pd.read_csv(StringIO(txt), sep="\s+", header=None, index_col=0, squeeze=True)