熊猫:如何将时间戳与交叉表数据关联

问题描述 投票:0回答:1

我有一个巨大的数据框,其中包含成百上千的列和成千上万的行。我使用pd.crosstabmelt处理了几列,以将数据转换为易于绘制的格式。数据帧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
python pandas dataframe plotly
1个回答
1
投票

[想法首先由GroupBy.aggGroupBy.aggGroupBy.size聚合,然后将GroupBy.sizejoin替代相加-0melt

DataFrame.unstack
© www.soinside.com 2019 - 2024. All rights reserved.