![](/img/trans.png)
[英]pandas how to get values from df2 for df1 while df1 and df2 have values overlapped on column(s)
[英]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.