【问题标题】:Efficiently assign bar chart from a pandas df从 pandas df 有效地分配条形图
【发布时间】:2018-06-28 23:28:17
【问题描述】:

我目前正在从 pandas df 手动创建 bar chart。有没有更有效的方法可以直接从df 读取它?

import pandas as pd
import matplotlib.pyplot as plt

d = ({
    'A' : ['1','1','1','2','2','2','3','3','3','3'],     
    'B' : ['A','B','C','A','B','C','D','A','B','C'],
    'C' : ['John','Carl','Carl','John','Lily','John','Lily','John','Carl','Carl'],         
    })

df = pd.DataFrame(data=d)

fig,ax = plt.subplots(figsize = (3,3))

Ay = [3]
Ax = [1]

By = [2,1]
Bx = [7,12]

Cy = [1,2]
Cx = [3,8]

Dy = [1]
Dx = [14]

plt.bar(Ax,Ay, label = 'A')
plt.bar(Bx,By, label = 'B')
plt.bar(Cx,Cy, label = 'C')
plt.bar(Dx,Dy, label = 'D')

plt.legend(loc = 'upper right')
plt.show()

如果我手动添加 xticks 以显示预期输出的人:

【问题讨论】:

    标签: python pandas matplotlib bar-chart


    【解决方案1】:

    您可以使用pivot_table

    df.assign(A=df.A.astype(int)).pivot_table(index="C", columns="B", values="A",aggfunc='count').rename_axis(None).rename_axis(None,1).plot(kind='bar')
    

    【讨论】:

      【解决方案2】:

      您在数据框和绘图中的数据不匹配,例如约翰有匹配的行

      >>> df[df.C == "John"]
         A  B     C
      0  1  A  John
      3  2  A  John
      5  2  C  John
      7  3  A  John
      >>>    
      

      将数据框设置为绘图中的数据。

      >>> d = ({
      ...     "A" : [3,1,2,2,1,1],
      ...     "B" : ["A", "C", "B", "C", "B", "D",],
      ...     "C" : ["John", "John", "Carl", "Carl", "Lily", "Lily"]
      ... })
      >>>
      >>> df = pd.DataFrame(data=d)
      

      使用pivot 重塑列和绘图。

      >>> df.pivot(index="C", columns="B", values="A").plot(kind="bar")
      

      【讨论】:

      • A 列代表一个事件,而 B 列代表该事件的不同功能。所以约翰可以为同一事件分配不同的功能
      • 当您回答问题时,请尝试使用发布的数据操作。
      • 我明白,正如我在帖子中所说,我不知道 y 值是如何从原始数据帧中计算出来的。
      猜你喜欢
      • 2019-02-12
      • 1970-01-01
      • 2021-09-19
      • 2017-03-18
      • 1970-01-01
      • 2021-11-11
      • 2012-12-08
      • 2013-09-13
      • 1970-01-01
      相关资源
      最近更新 更多