for 循环中某些值的条件 (Python pandas)

Condition for certain values in a for loop (Python pandas)

我有一个股票 return 的数据框,用于标普指数中的几家公司。我计算了他们的 returns.

我想要一个 for 循环,它从一个 return 值(在这段时间内的平均值)和最低的 5 个公司 return 值中获取前 5 个(例如)公司大数据框。那我要画图了

我有一个代码可以为我提供所有公司的 return 并绘制它们。

graph_df = pd.DataFrame()

for name in df['Name'].unique():
    print(name) # keeping track of which tickers are included
    name_df = df.copy()[df['Name']==name] # creating a new df, copying in the name columns
    name_df[f"{name}_factor"] = name_df["Difference"]
    if graph_df.empty:
        graph_df = name_df[[f"{name}_factor"]]
    else:
        graph_df = graph_df.join(name_df[f"{name}_factor"])

这是来自 print(graph_df) 的片段:

             StockRet1   StockRet2   StockRet3   StockRet4   StockRet5
Dates                                                                  
1990-01-31   0.000000    0.000000    0.000000    0.000000    0.000000  
1990-02-28  -0.098820    0.000000   -0.076981    0.019755   -0.012170  
1990-03-30   0.023653    0.000000   -0.011115    0.044565   -0.042621  
1990-04-30   0.010303    0.000000   -0.074512    0.067319   -0.003569  

如你所见,情节非常混乱,所以我只想展示最高和最低的。感谢所有帮助!

我认为你可以使用 nlargest(在 pandas 版本 0.17.0 中添加):

print graph_df
print df.nlargest(6, 'stockretaverage')

假设第 6 列取平均值。

假设感兴趣的列被标记为 'data',一种解决方案是

df['min'] = df.data[(df.data.shift(1) > df.data) & (df.data.shift(-1) > df.data)]
df['max'] = df.data[(df.data.shift(1) < df.data) & (df.data.shift(-1) < df.data)]

当您拥有整个数据帧时:

df = df[np.concatenate((df.sum().sort_values().index[:5],df.sum().sort_values().index[-5:]))]

这会给出前 5 个和后 5 个。您只需绘制它们即可。

为了避免数组之间的任何重叠,您可以将连接包裹在 set() 中以获得唯一值。