在熊猫中查询MultiIndex DataFrame

安德烈斯·马鲁兰达

我有一个看起来像这样的DataFrame:

FirstDF=
              C
A    B      
'a' 'blue'   43
    'green'  59
'b' 'red     56
'c' 'green'  80
    'orange' 72

其中A和B设置为索引。我也有一个DataFrame看起来像:

SecondDF=

    A     B
0  'a'  'green'
1  'b'  'red'
2  'c'  'green'

有没有一种方法可以直接查询第一个DataFrame和最后一个,并获得如下所示的输出?

C
59
56
80

我通过遍历第二个DataFrame来做到这一点,如下所示,但是我想使用pandas逻辑而不是for循环来实现。

data=[]
for i in range(SecondDF.shape[0]):
    data.append(FirstDF.loc[tuple(SecondDF.iloc[i])])
data=pd.Series(data)
耶斯列尔

merge与参数left_indexand一起使用right_on

df = FirstDF.merge(SecondDF, left_index=True, right_on=['A','B'])['C'].to_frame()
print (df)
    C
0  59
1  56
2  80

与另一种解决方案isinMultiIndexES和通过过滤boolean indexing

mask = FirstDF.index.isin(SecondDF.set_index(['A','B']).index)
#alternative solution
#mask = FirstDF.index.isin(list(map(tuple,SecondDF[['A','B']].values.tolist())))
df = FirstDF.loc[mask, ['C']].reset_index(drop=True)
print (df)
    C
0  59
1  56
2  80

详细说明

print (FirstDF.loc[mask, ['C']])
              C
A   B          
'a' 'green'  59
'b' 'red'    56
'c' 'green'  80

编辑:

您可以使用merge外部联接和indicator=True参数,然后按boolean indexing以下条件过滤

df1=FirstDF.merge(SecondDF, left_index=True, right_on=['A','B'], indicator=True, how='outer')
print (df1)
    C    A         B     _merge
2  43  'a'    'blue'  left_only
0  59  'a'   'green'       both
1  56  'b'     'red'       both
2  80  'c'   'green'       both
2  72  'c'  'orange'  left_only

mask = df1['_merge'] != 'both'
df1 = df1.loc[mask, ['C']].reset_index(drop=True)
print (df1)
    C
0  43
1  72

对于第二个解决方案,可以通过~以下方式反转布尔值掩码

mask = FirstDF.index.isin(SecondDF.set_index(['A','B']).index)
#alternative solution
#mask = FirstDF.index.isin(list(map(tuple,SecondDF[['A','B']].values.tolist())))
df = FirstDF.loc[~mask, ['C']].reset_index(drop=True)
print (df)
    C
0  43
1  72

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫MultiIndex DataFrame排序

熊猫-用MultiIndex DataFrame中的系列除以DataFrame值

在熊猫MultiIndex DataFrame中按级别求和列

在熊猫DataFrame中基于MultiIndex提取组的头部

在Pandas Dataframe中查询Multiindex-特殊索引

在熊猫MultiIndex DataFrame中选择行

慢熊猫DataFrame MultiIndex重新索引

熊猫DataFrame-> GroupBy-> MultiIndex Process

熊猫:合并multiIndex DataFrame的标题行

创建没有NaN的熊猫MultiIndex Dataframe

熊猫如何在Multiindex DataFrame中获取对索引级别具有多个值的行的列表

修改熊猫MultiIndex DataFrame中每个组的最后一行

重新排序熊猫from_product-MultiIndex DataFrame中的级别,以及值?

在熊猫中填充DataFrame

熊猫日历中的DataFrame

为什么在具有一级索引的MultiIndex列的熊猫DataFrame中,行为会有所不同?

熊猫MultiIndex DataFrame.rolling偏移量

仅转置熊猫MultiIndex dataFrame的一级

熊猫:向仅包含1行的DataFrame添加MultiIndex

熊猫MultiIndex Dataframe滚动平均值分组

熊猫DataFrame每年从MultiIndex DateIndex获得第1天

如何将json读取到熊猫MultiIndex Dataframe?

熊猫通过groupby到DataFrame MultiIndex而不进行聚合

熊猫在MultiIndex DataFrame中选择特定的较低级列

将multiindex Series透视到DataFrame中

如何从我的 DataFrame 中删除 MultiIndex?

使用MultiIndex删除DataFrame中的对称对

在MultiIndex DataFrame中重新采样时间序列

对 pandas MultiIndex DataFrame 中的多级列求和