考虑以下的
你会发现对于每个级别的
正确的处理方式是什么?
hdfstore
和数据框 df
和 df2
。import pandas as pd
store = pd.HDFStore('test.h5')
midx = pd.MultiIndex.from_product([range(2), list('XYZ')], names=list('AB'))
df = pd.DataFrame(dict(C=range(6)), midx)
df
C
A B
0 X 0
Y 1
Z 2
1 X 3
Y 4
Z 5
midx2 = pd.MultiIndex.from_product([range(2), list('VWX')], names=list('AB'))
df2 = pd.DataFrame(dict(C=range(6)), midx2)
df2
C
A B
0 V 0
W 1
X 2
1 V 3
W 4
X 5
我希望先将 df
写入存储。
store.append('df', df)
store.get('df')
C
A B
0 X 0
Y 1
Z 2
1 X 3
Y 4
Z 5
稍后我将有另一个数据框,我想用它来更新存储。我想覆盖与我的新数据框中相同索引值的行,同时保留旧的行。
当我这样做时:
store.append('df', df2)
store.get('df')
C
A B
0 X 0
Y 1
Z 2
1 X 3
Y 4
Z 5
0 V 0
W 1
X 2
1 V 3
W 4
X 5
这不是我想要的。请注意,(0, 'X')
和(1, 'X')
被重复了。我可以操作合并的数据框并覆盖,但我希望能够处理大量数据,这样做将不可行。
我如何更新存储以获取所需内容?
C
A B
0 V 0
W 1
X 2
Y 1
Z 2
1 V 3
W 4
X 5
Y 4
Z 5
你会发现对于每个级别的
'A'
,'Y'
和 'Z'
都是相同的,'V'
和 'W'
是新增的,'X'
则被更新了。正确的处理方式是什么?