python - 获取在 python pandas 中的任何行中包含特定值的列名

标签 python pandas dataframe input

我想根据 pandas 中特定列中包含的特定值从整个数据库中获取列名(假设数据库包含超过 100 行和超过 50 列)。

在 Bkmm3(来自印度的成员)的帮助下,我在数字术语上取得了成功,但在字母术语上失败了。我试过的方法是这样的:

df = pd.DataFrame({'A':['APPLE','BALL','CAT'],
                    'B':['ACTION','BATMAN','CATCHUP'],
                    'C':['ADVERTISE','BEAST','CARTOON']})
response = input("input")
for i in df.columns: if(len(df.query(i + '==' + str(response))) > 0):
print(i)`

然后输出出现错误:

Traceback (most recent call last): NameError: name 'APPLE' is not defined

非常感谢你们的任何帮助,谢谢。 . .

最佳答案

isin/eq 适用于数据帧,您可以 100% 对其进行矢量化:

df.columns[df.isin(['APPLE']).any()]  # df.isin([response])

或者,

df.columns[df.eq(response).any()]

Index(['A'], dtype='object')

这是使用 DataFrame.evalnp.logical_or 的迂回方式(你是在列上循环):

df.columns[
    np.logical_or.reduce(
        [df.eval(f"{repr(response)} in {i}") for i in df]
)]
Index(['A'], dtype='object')

关于python - 获取在 python pandas 中的任何行中包含特定值的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50923707/

相关文章:

python - 如何从采样率 8000Hz 的音频中提取 CQT (librosa)

python - Python 3 中解析 XML 模式的 LXML 问题

python - 从 pandas 多重索引中删除冗余级别

r - 每次遇到值时创建一个新的数据框

python - 元组列表转为 CSV

python - 将多个正则表达式合并为一个可能为 "catch them all"

python - 从文件中读取时缺少第一行 - Python Pandas

python - Pandas .at 与 .loc

python - 使用 Pandas 根据另一列的一部分更改列值

python - 将字典值加载到 Pandas 数据框的行值中