这里我有一个数据框,它表示一段时间内不同股票的交易量。 (真实的数据集应该扩展到数千种不同的股票,时间段也是任意的,这里的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/