我有一个巨大的数据框,其中包含成百上千的列和成千上万的行。我使用pd.crosstab
和melt
处理了几列,以将数据转换为易于绘制的格式。数据帧df
看起来像这样;
Time Speed Height
1 100 200
2 150 220
3 500 270
4 500 270
5 900 245
6 150 269
7 100 220
我基本上只是在“速度”和“高度”的每个点上计算实例数量,并将其绘制在散点图上。 ;
new_df = pd.crosstab(df['Speed'], df['Height'].fillna('n/a'))
plot_df = new_df.reset_index()
plot_df = plot_df.melt(id_vars="Speed")
plot_df = plot_df.rename(columns={"index": "Speed",
"variable": "Height",
"value": "Count"})
我正在使用图,所以我可以使用新的Count
列作为图形上的标记大小,但是我也可以在悬浮文本中使用它来显示计数值以及该点的X和Y值。 plot_df
最终看起来像;
Speed Height Count
100 200 1
150 200 0
500 200 0
900 200 0
500 200 0
100 220 1
150 220 1
500 220 0
900 220 0
500 220 0
100 245 0
150 245 0
500 245 0
900 245 1
500 245 0
100 269 0
150 269 1
500 269 0
900 269 0
500 269 0
100 270 0
150 270 0
500 270 2
900 270 0
500 270 0
这给了我某种方式,将时间数据与交叉表数据相关,并进一步与plot_df
相关联,这样我就可以将其用作悬停数据,而我找不到关于如何执行此操作的任何有用信息。
我该怎么做?输出看起来像;
Speed Height Count Time/Index
100 200 1 1
150 200 0 0
500 200 0 0
900 200 0 0
500 200 0 0
100 220 1 7
150 220 1 2
500 220 0 0
900 220 0 0
500 220 0 0
100 245 0 0
150 245 0 0
500 245 0 0
900 245 1 5
500 245 0 0
100 269 0 0
150 269 1 6
500 269 0 0
900 269 0 0
500 269 0 0
100 270 0 0
150 270 0 0
500 270 2 3, 4
900 270 0 0
500 270 0 0
[想法首先由GroupBy.agg
与GroupBy.agg
和GroupBy.size
聚合,然后将GroupBy.size
与join
替代相加-0
与melt
:
DataFrame.unstack