python - 如何返回pandas时间序列中最大值的相对索引

标签 python pandas

这里我有一个数据框,它表示一段时间内不同股票的交易量。 (真实的数据集应该扩展到数千种不同的股票,时间段也是任意的,这里的df只是一个简化的例子)

            d-1     d-2    d-3     d-4
00001.SH    5000    4600    4893   2321
00002.SH    2134    3456    6433   2131
00003.SH    3543    3128    5423   9642
00032.RS    3234    6432    2234   3213
00006.RS    3435    3452    1231   1229
00004.LH    3213    4232    3652   1233

我试图找到时间序列上每只股票最大交易量的相对指数,以便我可以对找到的指数进行排名。为了方便排序操作,我希望时间序列上的索引是整数,也就是说,“d-1”是1,“d-2”是2,“d-3”是3,......,等等

例如,对于00001.SH,我希望它返回1(d-1),最终结果应该是这样的

00001.SH    1
00002.SH    3
00003.SH    4
00032.RS    2
00006.RS    2
00004.LH    2

我知道可以通过循环来完成,但请问是否有更有效的方法?由于数据集足够大,运行循环会浪费大量时间。 欢迎任何帮助,非常感谢!

最佳答案

使用 DataFrame.idxmax 获取最大值的列,然后通过 Series.str.extract 提取数字:

s = df.idxmax(axis=1).str.extract('(\d+)', expand=False)
print (s)
00001.SH    1
00002.SH    3
00003.SH    4
00032.RS    2
00006.RS    2
00004.LH    2
dtype: object

或者您可以先提取然后使用idxmax:

df.columns = df.columns.str.extract('(\d+)', expand=False)

#if is posible assign values by length of columns
#df.columns = range(1, len(df.columns) + 1)
print (df)
             1     2     3     4
00001.SH  5000  4600  4893  2321
00002.SH  2134  3456  6433  2131
00003.SH  3543  3128  5423  9642
00032.RS  3234  6432  2234  3213
00006.RS  3435  3452  1231  1229
00004.LH  3213  4232  3652  1233

s = df.idxmax(axis=1)
print (s)
00001.SH    1
00002.SH    3
00003.SH    4
00032.RS    2
00006.RS    2
00004.LH    2
dtype: object

关于python - 如何返回pandas时间序列中最大值的相对索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65390268/

相关文章:

python - 在具有不同比例的不同轴上绘制两个数据框列

python - 正确比较函数的输出

python - 如何解决Django和Postgresql的“关系{tableName}的列{columnName}不存在”

Python FBX SDK – 如何启用自动完成?

python - Pandas df.iterrows() 并行化

python - 如何计算数据框中每篇文章的段落数?

python - Python : How to create n processes and iterate over a list

Python 命令行参数检查是否默认或给定

python - 如何以有效的方式将具有 MultiIndex 的数据帧合并到另一个数据帧中?

python - 使用 pandas 在 python 中分割文本并相应 append