Python Pandas获取行位置名称而不是索引值

时间:2017-06-21 15:56:14

标签: python pandas dataframe

您好我有以下数据框,我正在尝试计算每个城市(行)的绝对更改,并打印具有最大值的城市的城市名称。我能够得到绝对的变化,但我没有获得城市名称,我只能得到索引值。有没有办法可以获得城市名称而不是索引值。在下面的例子中,我得到索引值3而不是“达拉斯”。

       City  col1  col2  col3  col4
0   Chicago    10    45    25    60
1   Atlanta    15    75    35   105
2  New York    80    90    60   325
3    Dallas   200     5   420    55

输出:

diff_row = df.max(axis=1) - df.min(axis=1)
print(diff_row.idxmax())

获得col1-col4的最大绝对值

3

当前输出:

Dallas

期望的输出:

let factorial = function (n: number): number {
    if (isFinite(n) && n > 0 && n == Math.round(n)) {
        if (!(n in factorial))
            factorial[n] = n * factorial(n - 1);
        return factorial[n];
    }
    else
        return NaN;
} as Factorial;

factorial[1] = 1;

2 个答案:

答案 0 :(得分:2)

将索引标签传递给loc和感兴趣的col:

In[198]:
df.loc[diff_row.idxmax(), 'City']

Out[198]: 'Dallas'

答案 1 :(得分:1)

退一步并使用numpy.ptp(峰值到峰值)减去最小值min。

df.set_index('City').apply(np.ptp, 1).idxmax()

'Dallas'

我们可以通过

将更多内容推送到numpy
df.City.values[np.ptp(df.set_index('City').values, 1).argmax()]

'Dallas'

计时

%timeit df.City.values[np.ptp(df.set_index('City').values, 1).argmax()]
%timeit df.set_index('City').apply(np.ptp, 1).idxmax()
1000 loops, best of 3: 399 µs per loop
1000 loops, best of 3: 1.03 ms per loop

%%timeit 
diff_row = df.max(axis=1) - df.min(axis=1)
df.loc[diff_row.idxmax(), 'City']
1000 loops, best of 3: 1.24 ms per loop