如果我有数据框说
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
中的值。同样的标准适用于cary
和milesy
,否则不应绘制任何内容。我怎么能这样做?
milesy
和milesx
。 y轴应该是一些连续的值(1,2 ...)。
答案 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);