【问题标题】:Pandas - Find a column with a specific value in the entire dataframePandas - 在整个数据框中查找具有特定值的列
【发布时间】:2020-12-07 16:42:22
【问题描述】:

我有一个包含几列的 DataFrame。有一列的值在整个数据框中只出现一次。我想编写一个函数,该函数返回具有该特定值的列的列名。我可以通过通常的数据探索手动找到它所在的列,但由于我有多个具有相同属性的数据框,我需要能够为多个数据框找到该列。所以一个稍微概括的函数会更好用。

问题是我事先不知道我正在寻找哪一列,因为在每个数据框中,具有该特定值的特定列的位置是不同的。此外,不同数据框中所需的列具有不同的名称,因此我不能使用 df['my_column'] 之类的名称来提取列。

谢谢

【问题讨论】:

  • 欢迎来到stackoverflow。请提供一个带有输入和所需输出的可行示例。
  • 你知道数据类型是不是在所有场景中都是?
  • @Manakin -- 是的,所有场景中的数据类型都是相同的。
  • df.select_dtypes('your_dtype').eq('target_value').any() 应该可以工作。我回应@Stefan,您应该添加一些虚拟数据来说明您的问题。

标签: python python-3.x pandas numpy dataframe


【解决方案1】:

您需要迭代列并查找值:

def find_col_with_value(df, value):

    for col in df:
        if (df[col] == value).any():
             return col

这将返回包含value 的第一列的名称。如果值不存在,则返回None

【讨论】:

  • 谢谢凯尔,你的回答完全解决了我的问题。
【解决方案2】:

检查整个 DataFrame 的特定值,检查 any 以查看它是否出现在列中,然后对列进行切片(或者如果需要 Series,则切片 DataFrame)

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.normal(0, 5, (100, 200)),
                  columns=[chr(i+40) for i in range(200)])
df.loc[5, 'Y'] = 'secret_value'  # Secret value in column 'Y'

df.eq('secret_value').any().loc[lambda x: x].index
# or
df.columns[df.eq('secret_value').any()]

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

【讨论】:

    【解决方案3】:

    我有另一个解决方案:

    names = ds.columns
    for i in names:
        for j in ds[i]:
            if j == 'your_value':
                print(i)
                break
    

    在这里,您正在收集所有列的名称,然后在找到它时迭代所有数据集。然后打印列名。

    【讨论】:

      猜你喜欢
      • 2019-05-04
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2019-04-27
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多