【发布时间】:2016-10-17 00:33:16
【问题描述】:
我想将具有单个非唯一索引 (df1) 的数据帧的一列中的值与另一个数据帧 (df2) 的值进行比较(即 > 或 df1 中的值与df2 中的每个值与第一级的相应索引值相匹配。
例如如果 df1 中的值小于 df2 中第一级索引与 df1 中值的索引匹配的任何值,则结果应显示“True”。 一个示例代码将说明这一点
index_a = [1,2,2,3,3,3]
index_b = [0,0,1,0,1,2]
index = pd.MultiIndex.from_arrays([index_a,index_b], names=('a','b'))
df1 = pd.DataFrame(np.random.rand(4,), index = [1,2,3,3], columns=['p'])
>>> df1
p
a
1 0.672379
2 0.130578
3 0.128918
3 0.346115
df2 = pd.DataFrame(np.random.rand(6,), index=index, columns=['p'])
>>> df2
p
a b
1 0 0.187448
2 0 0.596792
1 0.075301
3 0 0.784842
1 0.256178
2 0.691007
我想要的可以如下实现:
dfexp = df2.unstack('b')
>>> dfexp
p
b 0 1 2
a
1 0.187448 NaN NaN
2 0.596792 0.075301 NaN
3 0.784842 0.256178 0.691007
>>> comp = dfexp.ge(df1.p,axis=0)
>>> comp
p
b 0 1 2
a
1 False False False
2 True False False
3 True True True
3 True False True
>>> comp.any(axis=1)
a
1 False
2 True
3 True
3 True
dtype: bool
可以在不取消堆叠df2 的情况下实现这一点吗? 问题是,对于某些一级索引,二级标签可能非常大,这使得操作非常缓慢并且expdf 数据框不必要地大。同时df1 的索引也可能非常大,因此我想避免通过循环该索引来解决任务,除非该循环可以非常非常快。
【问题讨论】:
-
df2 = pd.DataFrame(data, index=index, columns=['p'])data是什么? -
我们如何创建
data和index来形成df2? -
抱歉信息缺失。我编辑了帖子。
-
请将此
np.random.seed([3,1415])添加到df1分配的正上方的一行中。这将确保我们得到相同的随机数。