【发布时间】:2015-04-10 11:25:55
【问题描述】:
我想了解pandasMultiIndexDataFrames 以及如何为它们分配数据。具体来说,我有兴趣分配与另一个较小数据框匹配的整个块。
ix = pd.MultiIndex.from_product([['A', 'B'], ['a', 'b', 'c', 'd']])
df = pd.DataFrame(index=ix, columns=['1st', '2nd', '3rd'], dtype=np.float64)
df_ = pd.DataFrame(index=['a', 'b', 'c', 'd'], columns=['1st', '2nd', '3rd'], data=np.random.rand(4, 3))
df_
1st 2nd 3rd
a 0.730251 0.468134 0.876926
b 0.104990 0.082461 0.129083
c 0.993608 0.117799 0.341811
d 0.784950 0.840145 0.016777
df 是一样的,只是所有的值都是NaN 并且有两个块A 和B。现在,如果我想将值从 df_ 分配到 df 我想我可以做类似的事情
df.loc['A',:] = df_ # Runs, does not work
df.loc[('A','a'):('A','d')] = df_ # AssertionError (??) 'Start slice bound is non-scalar'
df.loc[('A','a'):('A','d')] # No AssertionError (??)
idx = pd.IndexSlice
df.loc[idx['A', :]] = df_ # Runs, does not work
这些都不起作用,它们将df 中的所有值保留为NaN,尽管df.loc[idx['A', :]] 为我提供了与子帧(df_)完全匹配的数据帧切片。那么这是在视图上设置值的情况吗?在df_ 中显式迭代索引工作
# this is fine
for v in df_.index:
df.loc[idx['A', v]] = df_.loc[v]
# this is also fine
for v in df_.index:
df.loc['A', v] = df_.loc[v]
甚至可以像这样分配整个块(有点像NumPy)?如果没有,那很好,我只是想了解系统是如何工作的。
有一个关于索引切片器的相关问题,但它是关于将单个值分配给DataFrame 的屏蔽部分,而不是关于分配块。
Pandas : Proper way to set values based on condition for subset of multiindex dataframe
【问题讨论】:
标签: python pandas variable-assignment multi-index