gt6*_*89b 75 python pivot python-2.7 pandas
我有一个像元组的列表
data = [
('r1', 'c1', avg11, stdev11),
('r1', 'c2', avg12, stdev12),
('r2', 'c1', avg21, stdev21),
('r2', 'c2', avg22, stdev22)
]
Run Code Online (Sandbox Code Playgroud)
我想将它们放入一个pandas DataFrame中,其中第一列命名的行和第二列命名的列.似乎照顾行名称的方式是类似pandas.DataFrame([x[1:] for x in data], index = [x[0] for x in data])但是如何处理列以获得2x2矩阵(前一组的输出是3x4)?是否有更智能的方式来处理行标签,而不是明确省略它们?
编辑似乎我需要2个DataFrames - 一个用于平均值,一个用于标准偏差,这是正确的吗?或者我可以在每个"单元格"中存储值列表吗?
Rom*_*kar 64
您可以在创建后转动DataFrame:
>>> df = pd.DataFrame(data)
>>> df.pivot(index=0, columns=1, values=2)
# avg DataFrame
1 c1 c2
0
r1 avg11 avg12
r2 avg21 avg22
>>> df.pivot(index=0, columns=1, values=3)
# stdev DataFrame
1 c1 c2
0
r1 stdev11 stdev12
r2 stdev21 stdev22
Run Code Online (Sandbox Code Playgroud)
ely*_*ely 45
我认为最好将数据保持原样:
df = pandas.DataFrame(data, columns=['R_Number', 'C_Number', 'Avg', 'Std'])
# Possibly also this if these can always be the indexes:
# df = df.set_index(['R_Number', 'C_Number'])
Run Code Online (Sandbox Code Playgroud)
然后说它更直观一些
df.set_index(['R_Number', 'C_Number']).Avg.unstack(level=1)
Run Code Online (Sandbox Code Playgroud)
这种方式暗示您正在寻求重塑平均值或标准偏差.然而,仅仅使用pivot它,它纯粹基于列约定,关于你正在重塑什么语义实体.
Mar*_*oma 32
这是我在谈到这个问题时所期望的:
#!/usr/bin/env python
import pandas as pd
df = pd.DataFrame([(1, 2, 3, 4),
(5, 6, 7, 8),
(9, 0, 1, 2),
(3, 4, 5, 6)],
columns=list('abcd'),
index=['India', 'France', 'England', 'Germany'])
print(df)
Run Code Online (Sandbox Code Playgroud)
给
a b c d
India 1 2 3 4
France 5 6 7 8
England 9 0 1 2
Germany 3 4 5 6
Run Code Online (Sandbox Code Playgroud)