从元组列表构造pandas DataFrame
我有一个元组列表
data = [ ('r1', 'c1', avg11, stdev11), ('r1', 'c2', avg12, stdev12), ('r2', 'c1', avg21, stdev21), ('r2', 'c2', avg22, stdev22) ]
我想把它们放入一个pandas DataFrame中,第一列命名的行和第二列命名的列。 似乎照顾行名的方式就像pandas.DataFrame([x[1:] for x in data], index = [x[0] for x in data])
但是如何处理获得2x2matrix的列(前一集的输出是3×4)? 是否有一个更智能的方式来照顾行标签,而不是明确地忽略它们?
编辑看来我将需要2个dataframe – 一个平均值和一个标准偏差,是正确的? 或者我可以在每个“单元格”中存储值的列表?
您可以在创build后转换您的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
我认为最好将数据保持原样:
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'])
然后说更直观一点
df.set_index(['R_Number', 'C_Number']).Avg.unstack(level=1)
这样就暗示你正在寻求重塑平均数或者标准偏差。 而只是使用pivot
,它完全基于列约定关于你正在重塑的是什么语义实体。