我正在尝试使用单个值(字符串或数字)在数据库(接近60000行和20列)中进行搜索,并检索该值的相应列名称。如何在不对整个数据库执行完整搜索的情况下执行此操作?
如果表如下
Country | State | Population
----------------------------------
USA | Texas | 100000
India | Maharashtra | 200000
仅使用值“马哈拉施特拉邦”,我希望程序理解马哈拉施特拉邦的列为“州”,而不是“国家/地区”或“人口”。
数据存储在熊猫数据框中。
答案 0 :(得分:1)
Pandas:在任何列中为匹配搜索词而过滤的行
search = 'search term'
df.loc[df.isin([search]).any(axis=1)]
答案 1 :(得分:0)
如果数据不经常更改,则反向索引可能是性能最高的解决方案:
import numpy as np
import pandas as pd
df = pd.DataFrame({
"Country": ["USA", "India"],
"State": ["Texas", "Maharashtra"],
"Population": [100_000, 200_000],
})
# Create an inverse index - must be done only once:
inverse_map = pd.Series()
for idx, column in enumerate(df.columns):
column_data = pd.Series(np.repeat(idx, len(df[column])), index=df[column])
inverse_map = inverse_map.append(column_data)
# This should be fast - even for many queries:
df.columns[inverse_map.loc["Maharashtra"]]
# Output: 'State'
我使用inverse_map中的索引而不是列名来节省内存。
答案 2 :(得分:0)
尝试此代码,对我有用
df.columns[(df.values=='Maharashtra').any(0)].tolist()
df 是您的数据库,格式为 Pandas.Dataframe
它返回一个包含列名的列表