python - 从具有基于其他数据框列的多索引的数据框中选择行
问题描述
我有以州和地区名称为列的“univer”数据框,
State RegionName
0 Alabama Auburn
1 Alabama Florence
2 Alabama Jacksonville
3 Alabama Livingston
并且“statobot”数据框具有州和地区名称作为索引,
State RegionName 2008Q3 2009Q2 ratio
AK Anchor Point NaN NaN NaN
Anchorage 296166.666667 271933.333333 1.089115
Fairbanks 249966.666667 225833.333333 1.106863
Homer NaN NaN NaN
Juneau 305133.333333 282666.666667 1.079481
Kenai NaN NaN NaN
Ketchikan NaN NaN NaN
Kodiak NaN NaN NaN
Lakes 257433.333333 257200.000000 1.000907
North Pole 241833.333333 219366.666667 1.102416
Palmer 259466.666667 263800.000000 0.983573
现在我想根据“univer”数据框选择“statobot”数据框中的行,州和地区名称必须完全匹配,我尝试过使用
haveuni = statobot[(statobot.index.get_level_values(0).isin(univer['State'])) &(statobot.index.get_level_values(1).isin(univer['RegionName']))]
但结果行比我预期的要多得多。有没有其他更精确的方法?
解决方案
最简单的方法是合并 2 个数据框以进行交集。
statbot = statbot.set_index(['State', 'RegionName'])
univer = univer.set_index(['State', 'RegionName'])
print(pd.merge(univer, statbot, left_index=True, right_index=True, how='inner'))
在这里,我对 2 个数据帧有相同的多索引。left_on
如果您没有索引,则可以使用andright_on
参数而不是left_index
and指定要合并的列right_index
。
否则还有其他一些使用df.loc
和横截面的方法 -df.xs
关于多索引
循环遍历“univer”数据帧并找到与索引匹配的行 - “statbot”数据帧中的“State”和“RegionName”
for i, row in univer.iterrows():
print(statbot.loc[row['State'], row['RegionName']])
如果您可能想要整行而不删除索引字段,那么
for i, row in univer.iterrows():
print(statbot.xs((row['State'], row['RegionName']), level=(0, 1), axis=0, drop_level=False))
另一种方法是使用切片
statbot.reset_index(inplace=True)
for i, row in univer.iterrows():
print(statbot[(statbot['State']==row['State']) & (statbot['RegionName']==row['RegionName'])])
我希望这pd.merge
应该适用于您的情况。让我知道事情的后续。
推荐阅读
- javascript - 未捕获的错误:尚未为上下文加载模块名称“util”:_。使用要求([])
- c++ - 在新操作系统上编译时提供核心转储的旧代码
- xamarin - 光标位置在 xamarin 形式的 syncfusion Richtexteditor ver(18.4.0.30) 中不起作用,用于在文本冗长的情况下首先闪烁光标
- c++ - 如何使用 C++ 在 VS Code 中进行调试。我不断收到错误
- html - 如何链接 svg 图像而不消失?
- ruby-on-rails - NoMethodError:未定义的方法“入队”| 规范 | 活跃工作 | 导轨 4.1
- php - 单击复选框后如何冻结复选框?我尝试了,但它不起作用
- azure - ADF 管道和触发器
- mysql - MySQL - 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)
- javascript - 有没有办法使用访问器函数在 JS 中定义对象的属性?