如何从 pandas 数据框构建直方图,其中每个观察值都是一个列表?
How to build a histogram from a pandas dataframe where each observation is a list?
我有一个数据框如下。这些值位于单元格中,即元素列表。我想使用堆叠成行或按颜色分隔的直方图“S”可视化“值”列中值的分布 (Area_code)。
如何在 plotly 中获取值并构建直方图“S”?任何其他想法也欢迎。谢谢。
Area_code Values
0 New_York [999, 54, 231, 43, 177, 313, 212, 279, 199, 267]
1 Dallas [915, 183, 2326, 316, 206, 31, 317, 26, 31, 56, 316]
2 XXX [560]
3 YYY [884, 13]
4 ZZZ [203, 1066, 453, 266, 160, 109, 45, 627, 83, 685, 120, 410, 151, 33, 618, 164, 496]
如果您重塑数据,这将是 px.histogram 的完美案例。从那里您可以通过 histfunc
方法在 sum, average, count
等多个输出之间进行选择:
fig = px.histogram(df, x = 'Area_code', y = 'Values', histfunc='sum')
fig.show()
您还没有指定您想要什么样的输出,但我会留给您更改 histfunc
的参数并查看哪个选项最适合您的需求。
我经常倾向于敦促用户重新考虑他们的整个数据流程,但我只是假设有充分的理由让您坚持使用数据框中看起来非常奇怪的设置。下面的代码片段包含一个完整的数据处理过程,用于将您的数据从您的设置中重塑为所谓的 格式:
Area_code Values
0 New_York 999
1 New_York 54
2 New_York 231
3 New_York 43
4 New_York 177
5 New_York 313
6 New_York 212
7 New_York 279
8 New_York 199
9 New_York 267
10 Dallas 915
11 Dallas 183
12 Dallas 2326
13 Dallas 316
14 Dallas 206
15 Dallas 31
16 Dallas 317
17 Dallas 26
18 Dallas 31
19 Dallas 56
20 Dallas 316
21 XXX 560
22 YYY 884
23 YYY 13
24 ZZZ 203
对于 plotly.express 的许多强大功能来说,这是一种完美的格式。
完整代码:
import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
# data input
df = pd.DataFrame({'Area_code': {0: 'New_York', 1: 'Dallas', 2: 'XXX', 3: 'YYY', 4: 'ZZZ'},
'Values': {0: [999, 54, 231, 43, 177, 313, 212, 279, 199, 267],
1: [915, 183, 2326, 316, 206, 31, 317, 26, 31, 56, 316],
2: [560],
3: [884, 13],
4: [203, 1066, 453, 266, 160, 109, 45, 627, 83, 685, 120, 410, 151, 33, 618, 164, 496]}})
# data munging
areas = []
value = []
for i, row in df.iterrows():
# print(row['Values'])
for j, val in enumerate(row['Values']):
areas.append(row['Area_code'])
value.append(val)
df = pd.DataFrame({'Area_code': areas,
'Values': value})
# plotly
fig = px.histogram(df, x = 'Area_code', y = 'Values', histfunc='sum')
fig.show()
我有一个数据框如下。这些值位于单元格中,即元素列表。我想使用堆叠成行或按颜色分隔的直方图“S”可视化“值”列中值的分布 (Area_code)。
如何在 plotly 中获取值并构建直方图“S”?任何其他想法也欢迎。谢谢。
Area_code Values
0 New_York [999, 54, 231, 43, 177, 313, 212, 279, 199, 267]
1 Dallas [915, 183, 2326, 316, 206, 31, 317, 26, 31, 56, 316]
2 XXX [560]
3 YYY [884, 13]
4 ZZZ [203, 1066, 453, 266, 160, 109, 45, 627, 83, 685, 120, 410, 151, 33, 618, 164, 496]
如果您重塑数据,这将是 px.histogram 的完美案例。从那里您可以通过 histfunc
方法在 sum, average, count
等多个输出之间进行选择:
fig = px.histogram(df, x = 'Area_code', y = 'Values', histfunc='sum')
fig.show()
您还没有指定您想要什么样的输出,但我会留给您更改 histfunc
的参数并查看哪个选项最适合您的需求。
我经常倾向于敦促用户重新考虑他们的整个数据流程,但我只是假设有充分的理由让您坚持使用数据框中看起来非常奇怪的设置。下面的代码片段包含一个完整的数据处理过程,用于将您的数据从您的设置中重塑为所谓的
Area_code Values
0 New_York 999
1 New_York 54
2 New_York 231
3 New_York 43
4 New_York 177
5 New_York 313
6 New_York 212
7 New_York 279
8 New_York 199
9 New_York 267
10 Dallas 915
11 Dallas 183
12 Dallas 2326
13 Dallas 316
14 Dallas 206
15 Dallas 31
16 Dallas 317
17 Dallas 26
18 Dallas 31
19 Dallas 56
20 Dallas 316
21 XXX 560
22 YYY 884
23 YYY 13
24 ZZZ 203
对于 plotly.express 的许多强大功能来说,这是一种完美的格式。
完整代码:
import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
# data input
df = pd.DataFrame({'Area_code': {0: 'New_York', 1: 'Dallas', 2: 'XXX', 3: 'YYY', 4: 'ZZZ'},
'Values': {0: [999, 54, 231, 43, 177, 313, 212, 279, 199, 267],
1: [915, 183, 2326, 316, 206, 31, 317, 26, 31, 56, 316],
2: [560],
3: [884, 13],
4: [203, 1066, 453, 266, 160, 109, 45, 627, 83, 685, 120, 410, 151, 33, 618, 164, 496]}})
# data munging
areas = []
value = []
for i, row in df.iterrows():
# print(row['Values'])
for j, val in enumerate(row['Values']):
areas.append(row['Area_code'])
value.append(val)
df = pd.DataFrame({'Area_code': areas,
'Values': value})
# plotly
fig = px.histogram(df, x = 'Area_code', y = 'Values', histfunc='sum')
fig.show()