【问题标题】:How can I create multiple histograms with pandas?如何使用 pandas 创建多个直方图?
【发布时间】:2014-08-01 02:33:19
【问题描述】:

我有一个包含三列的 csv 文件:全名、Test_A_Score、Test_B_Score。 Test_A_Score 和 Test_B_Score 的范围为 0-10。我的目标是让 Test_A_Score 的每个唯一值都根据 Test_B_Score 的值创建一个直方图。

test_scores.csv

Full name      Test_A_Score Test_B_Score
Jake Johnson        5            8
Helen Smith         9            6
   .
   .
   .
Jonathan Pierce     3            8

到目前为止我的代码:

import pandas as pd

df = pd.read_csv('test_scores.csv', delimiter=',',  na_values=['-']) 

# Get rid of missing scores
df = df[(df['Test_A_Score'] >= 0) & (df['Test_B_Score'] >= 0)]

score_range = range(11)

data = []
for score in score_range:
    scores = df[(df['Test_A_Score'] == score)]['Test_B_Score']
    data.append(scores)

df_hist = pd.DataFrame(data, columns=score_range)

所以,我想我会为 score_range 获取测试 B 分数,创建一个新的数据框,插入数据并使用以下内容绘制列的直方图:

import matplotlib.pyplot as plt

plt.figure()
scores_df.hist(color='k', alpha=0.5, bins=20)

问题在于 score_range 中每个值的分数的长度不同,并且需要将数据作为行插入,而不是像在名为 data 的列表中那样作为列插入。

【问题讨论】:

  • 你能提供test_score.csv的样本吗?
  • 我添加了我的 csv 文件示例。
  • 但是放一个有代表性的样本,以及对应的输出。我无法使用此示例重现某些内容。

标签: python pandas histogram


【解决方案1】:

首先你应该使用.dropna() 函数来去除不合理的值。 接下来,如果您寻找“独特性”,我认为groupby() 函数是您的朋友。

import pandas as pd
import matplotlib.pyplot as plt

frame = pd.DataFrame([['euler', 1, 3],
['gauss', 1, 5],
['fibo', 1, 6],
['schwartz', 2, 3],
['helmholtz', 2, 4],
['mandelbrodt', 3, 4]], columns=['Name','a','b'])

fig = plt.figure()
ax = [fig.add_subplot(1,3, i) for i in range(1,4)]

for index, (a, group) in enumerate(frame.groupby('a')):
    ax[index].hist(group.b.values)

.groupby() 返回一个迭代器,它为您提供组名和组本身。然后,您可以为每个组绘制 b 值的直方图。

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 2021-11-22
    • 1970-01-01
    • 2012-03-03
    • 2022-07-08
    • 2017-07-27
    • 2014-10-21
    • 2014-10-15
    • 2012-06-25
    相关资源
    最近更新 更多