如何将列表转置为方形矩阵

时间:2017-04-04 12:35:16

标签: python pandas

我想使用python将项目列表转换为方形矩阵格式。 我在熊猫中尝试过pivot_table,但它没有用。

这是我的代码,输入是两列csv文件

with open(path_to_file,"r") as f:
    reader = csv.reader(f,delimiter = ',')
    data = list(reader)
    row_count=len(data)
    print(row_count - 1)


df = pd.read_csv(path_to_file)


groups = df.groupby(['transmitter chan', 'receiver chan'])
max_for_AS = defaultdict(int)
df = df.assign(ID = [0 + i for i in xrange(len(df))])

print(df)

for g in groups:
    transmitter, count = g[0][0], len(g[1])
    max_for_AS[ transmitter ] = max( max_for_AS[transmitter], count )

for g in groups:
    transmitter, receiver, count = g[0][0], g[0][1], len(g[1])
    if count == max_for_AS[ transmitter ]:
    dataFinal = "{} , {} , {}".format(transmitter, receiver, count )
        print( dataFinal )

数据:

  V1 V2  count
0  A  R      1
1  Z  T      4
2  E  B      9
3  R  O      8
4  T  M      7
5  Y  K      5
6  B  I      6
7  T  Z      2
8  A  O      7
9  Y  B      8

2 个答案:

答案 0 :(得分:0)

我认为你需要:

df = pd.read_csv(path_to_file)
df1 = df.pivot(index='V1',columns='V2',values='count').fillna(0).astype(int)
df1 = df.set_index(['V1','V2'])['count'].unstack(fill_value=0)

但如果V1V2中的重复内容需要汇总它们:

df1 = df.pivot_table(index='V1',columns='V2',values='count', fill_value=0)
df1 = df.groupby(['V1','V2'])['count'].mean().unstack(fill_value=0)
#for change ordering add reindex
df1 = df1.reindex(index=df.V1.unique(), columns=df.V2.unique())
print (df1)
V2  R  T  B  O  M  K  I  Z
V1                        
A   1  0  0  7  0  0  0  0
Z   0  4  0  0  0  0  0  0
E   0  0  9  0  0  0  0  0
R   0  0  0  8  0  0  0  0
T   0  0  0  0  7  0  0  2
Y   0  0  8  0  0  5  0  0
B   0  0  0  0  0  0  6  0

答案 1 :(得分:0)

由于目前尚不清楚你想要达到的目标,我将以假设来回答这个问题。

我假设你有BigInteger。如果这是真的,要使用pandas dataframe进行转置,您可能需要,

  1. numpy(df)转换为dataframe,如下所示:numpy ndarray
  2. 在步骤1的结果中使用df=df.values查找转置
  3. 编辑:

    更好的方式。您也可以numpy.transpose