仅使用一个值获取表中的列名

时间:2019-04-11 17:16:50

标签: python pandas

我正在尝试使用单个值(字符串或数字)在数据库(接近60000行和20列)中进行搜索,并检索该值的相应列名称。如何在不对整个数据库执行完整搜索的情况下执行此操作?

如果表如下

Country | State       | Population
----------------------------------
USA     | Texas       | 100000
India   | Maharashtra | 200000

仅使用值“马哈拉施特拉邦”,我希望程序理解马哈拉施特拉邦的列为“州”,而不是“国家/地区”或“人口”。

数据存储在熊猫数据框中。

3 个答案:

答案 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

它返回一个包含列名的列表