如何将 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
期望输出:[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 的索引以将其作为另一列 'Index',然后 set_index 在姓名、年龄、性别上找到在 df2 上匹配并仅采用生成的索引列是否可行?
那就是:
df1.reset_index().set_index(['Name','Age','Gender']).loc[df2.set_index(['Name','Age','Gender']).index]['Index'].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
期望输出:[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 的索引以将其作为另一列 'Index',然后 set_index 在姓名、年龄、性别上找到在 df2 上匹配并仅采用生成的索引列是否可行?
那就是:
df1.reset_index().set_index(['Name','Age','Gender']).loc[df2.set_index(['Name','Age','Gender']).index]['Index'].values