Построение на основе критериев столбца в Pandas - PullRequest
0 голосов
/ 07 июня 2018

Если у меня есть фрейм данных, скажем

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, если соответствующий индекс carx имеет значение 'merc'.Те же критерии применяются для cary и milesy, иначе ничего не должно быть построено.Как я могу это сделать?

milesy и milesx должны быть нанесены на ось X.По оси Y должны быть только некоторые непрерывные значения (1,2 ...).

1 Ответ

0 голосов
/ 07 июня 2018

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...