【问题标题】:how to plot aggregated dataframes in seaborn in Python?如何在 Python 中绘制 seaborn 中的聚合数据框?
【发布时间】:2015-12-15 23:28:52
【问题描述】:

我有一个跨时间的测量数据框,其中包含重复。我正在尝试使用 seaborn 绘制此数据框的汇总和汇总版本。数据是:

A = pandas.DataFrame({"measurement": [1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
                      "t": [1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
                      "value": [10, 10.5, 10.4, 10.6, 10.01,
                                10, 10, 10, 10, 10]})
A["cond"] = "A"
B = pandas.DataFrame({"measurement": [1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
                      "t": [1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
                      "value": [20, 40.5, 5.4, 1.6, 1.01,
                                30, 50, 60, 4, 3]})
B["cond"] = "B"
df = pandas.concat([A, B])

“cond”是条件,“measurement”是不同的重复(每个条件 2 个),“t”是时间维度。为了在每个复制中平均时间,我使用agg

x = df.groupby(["measurement", "cond"]).agg({"value": np.mean})

这将返回一个分层数据框。我想用 seaborn 绘制这些值,以将测量结果显示为分布。这不起作用:

sns.violinplot(x="cond", y="value", hue="cond", data=x)

错误:ValueError: Could not interperet input 'cond'

如何将agg 返回的数据帧展平,以便使用 seaborn 绘制?

【问题讨论】:

    标签: python pandas matplotlib seaborn


    【解决方案1】:

    您可以将参数 as_index=False 用于 groupby

    x = df.groupby(["measurement", "cond"], as_index=False).agg({"value": np.mean})
    

    【讨论】:

    • as_index=False 是否保证平面数据框?
    • 是的,它将是一级索引
    • 如果你不做多个聚合,它只会是一个平面数据框。例如,如果您执行了x = df.groupby(["measurement", "cond"], as_index=False).agg({"value": [np.mean, np.sum, np.max, np.min]}),这将生成一个 MultiIndex 列。尽管您可以使用x.columns = x.columns.map('_'.join) 使其变平
    猜你喜欢
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 2016-12-17
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多