python - 获取数据框中特定数据点的行和列标签

标签 python python-3.x pandas

我正在尝试获取收敛于 max_val 的列和行的行和列标签。本质上,我测量的是从一个列条目到另一个列条目的增长率。

def find_max(area):
    # YOUR CODE HERE
    data=pd.read_csv('Canada.csv')
    df = pd.DataFrame(data)

    #case insensitive
    prov_lower = province.lower()
    data['province'] = df['province'].astype(str).str.lower()

    #get percent change
    if prov_lower in data['province'].values:
        data=data[data['province']==province]
        df_match_pct=data[data.columns[3:-1]].diff(axis='columns').abs()

        #find max
        max_val=df_match_pct.max()
        max_val=max_val.max()

        #select column and row of max value
        c_r = df_match_pct.iloc[0:9] == max_val and df_match_pct[df_match_pct.iloc[0:9] == max_val]
        #how to get the column and row label of this?

    else:
        raise ValueError()

    return max_val,c_r



find_max('alberta')

我希望获得分类为“alberta”的数据的列与其对应行(特定区域位置)之间的差异的最大值,以及导致此变化的年份(记录最大变化的两年)

最佳答案

IIUC,你可以使用 numpy.argwhere :

c_r = [(c, r) for r, c in  np.argwhere(df_match_pct.values == max_val)][0]

或者如果您需要实际的索引和列标签,请使用:

c_r = [(df_match_pct.index[c], df_match_pct.columns[r]) for r, c in  np.argwhere(df_match_pct.values == max_val)][0]

或者,您可以链接 DataFrame.eqDataFrame.idxmax()方法:

c_r = (df.eq(max_val).idxmax(1).idxmax(1),
       df.eq(max_val).idxmax().idxmax())

关于python - 获取数据框中特定数据点的行和列标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55762049/

相关文章:

python - 如何使用 Pandas 或 Spark Dataframe 展平嵌套 Excel 数据?

python - 如何更新数组值并对新值执行相同的操作

python - 在执行代码中声明的变量不会在 Python 3 中成为本地变量 – 文档?

python - Pandas 一次更新多个列

python - 如何在多个 csv 文件中收集样本

python - 在 Keras 中使用 tf.metrics?

python - 如何使用 python 将文本拆分为子句?

扩展构建器模式的 Pythonic 方式

python - BeautifulSoup HTTPResponse 没有属性编码

python - Pandas:根据阈值将数据帧拆分为多个数据帧