私は、調査から得られたかなり複雑なデータセットのパンダ表現を扱っています。これまでのところ、複数のインデックスを持つ 1 次元の一連の変数が、このデータを格納して操作するのに最適なようです。
各変数名は、その特定の応答を一意に識別するための「パス」で構成されています。これらのパスの長さはさまざまです。階層インデックスがどのように機能するかを誤解しているのか、それともバグに遭遇しているのかを理解しようとしています。Pandas は、短いインデックスをデータセットに結合するときに最大長まで「パディング」し、その過程で値を破棄するように見えます。
たとえば、次のテストは失敗します。
def test_dataframe_construction1(self):
case1 = pd.Series(True, pd.MultiIndex.from_tuples([
('a1', 'b1', 'c1'),
('a2', 'b2', 'c2', 'd1', 'e1'),
]))
case2 = pd.Series(True, pd.MultiIndex.from_tuples([
('a3', 'b3', 'c3'),
('a4', 'b4', 'c4', 'd2', 'e2'),
]))
df = pd.DataFrame({
'case1': case1,
'case2': case2
})
logger.debug(df)
self.assertEquals(df['case1'].loc['a1'].any(), True)
そしてこれを印刷します:
a1 b1 c1 nan nan NaN NaN
a2 b2 c2 d1 e1 True NaN
a3 b3 c3 nan nan NaN NaN
a4 b4 c4 d2 e2 NaN True
興味深いことに、「短い」インデックスを NaN の代わりに空の文字列でパディングすると、次のような動作が期待できます。
def test_dataframe_construction2(self):
case1 = pd.Series(True, pd.MultiIndex.from_tuples([
('a1', 'b1', 'c1', '', ''),
('a2', 'b2', 'c2', 'd1', 'e1'),
]))
case2 = pd.Series(True, pd.MultiIndex.from_tuples([
('a3', 'b3', 'c3', '', ''),
('a4', 'b4', 'c4', 'd2', 'e2'),
]))
df = pd.DataFrame({
'case1': case1,
'case2': case2
})
logger.debug(df)
self.assertEquals(df['case1'].loc['a1'].any(), True)
そしてこれを印刷します:
case1 case2
a1 b1 c1 True NaN
a2 b2 c2 d1 e1 True NaN
a3 b3 c3 NaN True
a4 b4 c4 d2 e2 NaN True
ここで何が欠けていますか?ありがとう!