根据Pandas中的列标准绘制图表

时间:2018-06-06 23:05:38

标签: python pandas matplotlib

如果我有数据框说

df = {'carx' : [merc,rari,merc,hond,fia,merc]
      'cary' : [bent,maz,ben,merc,fia,fia]
      'milesx' : [0,100,2,22,5,6]
      'milesy' : [10,3,18,2,19,2]}

如果milesx的相应索引具有值'merc',那么我想绘制列carx中的值。同样的标准适用于carymilesy,否则不应绘制任何内容。我怎么能这样做?

应在x轴上绘制

milesymilesx。 y轴应该是一些连续的值(1,2 ...)。

1 个答案:

答案 0 :(得分:1)

IIUC,假设您有以下数据框:

import pandas as pd
import matplotlib.pyplot as plt

%matplotlib inline

# input dictionary
df = {'carx' : ['merc','rari','merc','hond','fia','merc'],
      'cary' : ['bent','maz','ben','merc','fia','fia'],
      'milesx' : [0,100,2,22,5,6],
      'milesy' : [10,3,18,2,19,2]}

# creating input dataframe
dataframe = pd.DataFrame(df)
print(dataframe)

结果:

   carx  cary  milesx  milesy
0  merc  bent       0      10
1  rari   maz     100       3
2  merc   ben       2      18
3  hond  merc      22       2
4   fia   fia       5      19
5  merc   fia       6       2

然后,您想绘制给定条件的值,可以使用函数完成,并使用apply

def my_function(row):
    if row['carx'] == 'merc':return row['milesx']
    if row['cary'] == 'merc': return row['milesy']
    else: return None

# filter those with only 'merc'
filtered = dataframe.apply(lambda row: my_function(row), axis=1)
print(filtered)

结果:

0    0.0
1    NaN
2    2.0
3    2.0
4    NaN
5    6.0
dtype: float64

当你们两个都不是NaN时,你不想绘图,所以可以使用dropna()

# plotting
filtered.dropna().plot(kind='bar', legend=None);