繁体   English   中英

如何将 DF1 中的索引值获取到 DF1 的列值与 DF2 的自定义多索引值匹配的位置?

[英]How can I get the index values in DF1 to where DF1's column values match DF2's custom multiindex values?

我有两个数据框:DF1 和 DF2。
DF2 本质上是 DF1 中随机生成的行子集。 我想获取 DF1 中所有列值完全匹配的行的(整数)索引。
我正在尝试使用多索引来执行此操作:因此,如果我有以下内容:

DF1:

Index  Name  Age   Gender  Label

0      Kate   24     F     1

1      Bill   23     M     0

2      Bob    22     M     0

3      Billy  21     M     0

DF2:

MultiIndex      Name  Age   Gender   Label

(Bob,22,M)      Bob    22     M      0

(Billy,21,M)    Billy  21     M      0

所需的 Output:[2,3]

我如何使用 DF2 中的 MultiIndex 来检查 DF1 中的那些匹配项? 我在搜索时发现了这个,但我认为这需要您事先指定您想要的值? 我找不到这个确切的用例。

df2.loc[(df2.index.get_level_values("Name" =='xxx') & 
        (df2.index.get_level_values('Age') == x & 
        (df2.index.get_level_values('Gender') == x)]

请告诉我最好的方法。 谢谢!

编辑(生成 df1 的代码): 伪代码:合并两个数据帧以获得总共 10 列并删除除 4 列以外的所有内容 编辑(生成 df2 的代码):

if amount_needed - len(lowest_value_keys) > 0: 
    extra_samples = df1[df1.Label==0].sample(n=amount_needed -len(lowest_value_keys) ,replace=False)
    lowest_value_df = pd.DataFrame(data = lower_value_keys, columns = ["Name", 'Age','Gender'])
    samples = pd.concat([lowest_value_df, extra_samples])
    samples.index = pd.MultiIndex.from_frame(samples [["Name", 'Age','Gender']])

else:  
    all_samples  = pd.DataFrame(data = lower_value_keys, columns = ["Name", 'Age','Gender']) 
    samples = all_samples.sample(n=amount_needed,replace=False)
    samples.index = pd.MultiIndex.from_frame(samples [["Name", 'Age','Gender']])

不确定这是否回答了您的查询,但如果我们首先重置 df1 的索引以将其作为另一列“索引”,然后在名称、年龄、性别上设置索引以查找 df2 上的匹配项并只获取结果索引列将那个工作?

那将是:

df1.reset_index().set_index(['Name','Age','Gender']).loc[df2.set_index(['Name','Age','Gender']).index]['Index'].values

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM