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

2024-09-27 21:25:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个标准普尔指数上几家公司股票收益的数据框架,我计算了它们的收益。你知道吗

我想有一个for循环,它从一个大的数据帧中获取返回值最高的前5个公司(例如)和返回值最低的5个公司。然后我想画出来。你知道吗

我有一个代码,给我所有公司的回报,并绘制它们。你知道吗

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"])

Plot

这是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  

正如你所见,情节非常混乱,所以我只想展示最高和最低的部分。谢谢你的帮助!你知道吗


Tags: 数据nameindffor标准公司收益
2条回答

我认为您可以使用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()中以获得唯一的值。你知道吗

相关问题 更多 >

    热门问题