【问题标题】:How to combine values from two rows with the same index如何将具有相同索引的两行中的值组合起来
【发布时间】:2021-07-05 20:37:13
【问题描述】:

我有一个数据框,每两行具有相等的“时间”索引,两个具有可能相等值的“数据”列,value1 仅包含正数,value2 仅包含负值,并且一个“类型”列与一行不同来自另一个:

time     type  value1 value2
01:26:00  A     1      -5
01:26:00  B     2      -6
01:28:35  A     3      -7
01:28:35  B     4      -8

我可以为任何一种类型绘制条形图,也可以在另一个上绘制组合条形图(当我注释掉第 1 行时):

df = df.loc['type'] /line #1
df.plot(x='time', y=['value1', 'value2'], kind='bar', stacked=True)

我需要的是绘制条形图,时间在 X 轴上,A 的 value1 与 B 的 value1 并排,相反的是 A 的 value2 和 B 的 value2,如下所示:

非常感谢您的帮助。

【问题讨论】:

  • 我不明白“到目前为止,我已经实现了条形图...”,你能重述一遍吗?
  • 您有 两个单独的系列,由 type 列定义,因此您需要将其传递给 plot 命令。或者手动groupby('type)' / 迭代type 的值。 “将具有相同索引的两行的值组合起来”您不想这样做。

标签: python pandas dataframe matplotlib


【解决方案1】:

这可以使用 seaborn barplot 函数来完成,该函数提供了方便的 hue 参数,可以并排显示 A 和 B。在以下示例中,saturation 参数用于区分 value1 和 value2:

import io
import pandas as pd    # v 1.2.3
import seaborn as sns  # v 0.11.1

# Create sample dataset
data = """
time     type  value1 value2
01:26:00  A     1      -5
01:26:00  B     2      -6
01:28:35  A     3      -7
01:28:35  B     4      -8
"""
df = pd.read_csv(io.StringIO(data), delim_whitespace=True)

# Create bar chart
ax = sns.barplot(data=df, x='time', y='value1', hue='type', saturation=1, zorder=2)
sns.barplot(data=df, x='time', y='value2', hue='type', saturation=0.6, zorder=2, ax=ax)
ax.set_ylabel('value1 and value2', labelpad=10)

# Format chart
ax.grid(axis='y', linewidth=0.5, zorder=1)
ax.axhline(color='black', linewidth=1, alpha=0.3)
ax.tick_params(axis='both', which='major', length=0)
sns.despine(left=True, bottom=True)

# Edit legend
handles, labels = ax.get_legend_handles_labels()
ntypes = df['type'].nunique()
ax.legend(handles[:ntypes], labels[:ntypes], loc=(1.03, 0.5), frameon=False);

【讨论】:

  • 谢谢你,帕特里克。这正是我想要的。
  • @user6836215 很高兴能提供帮助。我对代码进行了一些编辑,以使情节看起来更整洁,更类似于您共享的图像。通过单击edited 按钮仍然可以访问以前的版本。
猜你喜欢
  • 1970-01-01
  • 2015-04-30
  • 2019-05-25
  • 1970-01-01
  • 2021-09-08
  • 2022-01-16
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
相关资源
最近更新 更多