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()
中以获得唯一值。
我有一个股票 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()
中以获得唯一值。