我真的很难潜入大熊猫:
这里我想用双索引建立一个这样的DataFrame:i1和i2:
cols = ["i1", "i2", "d1", "d2", "d3"]
T = pd.DataFrame( columns=cols ).set_index(["i1", "i2"])
然后将行附加到右侧索引
的行 到目前为止,我已经尝试过了:T.loc[ 1,2 ] = pd.Series({"d1":10, "d2":20, "d3":30})
还有:
T.append( pd.Series({"d1":10, "d2":20, "d3":30}, name=(1,2)) )
没有一个能给出理想的结果。
答案 0 :(得分:1)
首次尝试以下作品:
In [258]:
T.loc(axis=0)[ (1,2) ] = pd.Series({"d1":10, "d2":20, "d3":30})
T
Out[258]:
d1 d2 d3
i1 i2
1 2 10 20 30
这个T.append( pd.Series({"d1":10, "d2":20, "d3":30}, name=(1,2)) )
在pandas 0.16.2
答案 1 :(得分:1)
如果您执行T.loc[(1,2),:]
而不是T.loc[ 1,2 ]
,则第一个选项有效(因此pandas知道两个值都是行索引(对于两个行索引级别):
In [63]: T = pd.DataFrame( columns=cols ).set_index(["i1", "i2"])
In [64]: T.loc[( 1,2),: ] = pd.Series({"d1":10, "d2":20, "d3":30})
In [65]: T
Out[65]:
d1 d2 d3
i1 i2
1 2 10 20 30
更详尽的解释:T.loc[ 1,2 ]
将尝试访问第1行和第2列。因此,您需要将(1,2)
作为元组传递,并使用:
明确选择所有列,并赋予{ {1}}。
第二个适用于我(使用pandas 0.16.2):
.loc[(1,2),:]
但是,请注意,以这两种方式追加值将始终采用现有帧的副本 最好重新考虑您的方法并立即使用数据创建数据框(当然,这取决于您的应用程序)。