【问题标题】:How can I get the max (x) number of values from each column in a pandas dataframe while keeping the index for each?如何从熊猫数据框中的每一列中获取最大(x)个值,同时保留每个列的索引?
【发布时间】:2019-11-12 14:17:22
【问题描述】:

我正在尝试从 pandas 数据框中的每一列中获取前 x 个最大值。每列是一个日期,而每一行是不同的股票代码(见图)

理想情况下,我希望看到每个日期(列)的前 5 名的股票代码和编号

我尝试了几个不同的迭代器,但没有一个能工作并保留索引。

我想要的输出是一个新的 csv,其中包含日期和前 5 个股票代码(索引),基于当天列中的值。

将熊猫导入为 pd

df = pd.read_csv (见图)

没能把它弄好。enter image description here

【问题讨论】:

  • 链接显示原始数据帧的图像,该数据帧是被读入 df 的 csv。

标签: python pandas loops dataframe indexing


【解决方案1】:

pd.Series.nlargest 应用于每一列以屏蔽除前 N 个值之外的所有内容。然后unstack 并删除NaN。我将在这里使用前 2 个值进行说明。

样本数据

import pandas as pd
import numpy as np

np.random.seed(42)
df = pd.DataFrame(np.random.normal(0, 10, (4, 3)), 
                  columns=['Date1', 'Date2', 'Date3'], 
                  index=['Stock1', 'Stock2', 'Stock3', 'Stock4'])
#            Date1     Date2     Date3
#Stock1   4.967142 -1.382643  6.476885
#Stock2  15.230299 -2.341534 -2.341370
#Stock3  15.792128  7.674347 -4.694744
#Stock4   5.425600 -4.634177 -4.657298

代码

df.apply(pd.Series.nlargest, n=2).unstack().dropna()

#Date1  Stock2    15.230299
#       Stock3    15.792128
#Date2  Stock1    -1.382643
#       Stock3     7.674347
#Date3  Stock1     6.476885
#       Stock2    -2.341370
#dtype: float64

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2022-07-27
    • 2013-02-03
    • 2018-08-04
    • 2022-01-25
    相关资源
    最近更新 更多