我有一個包含運動員、他們的年齡范圍和他們參加比賽的年份的資料集:
import ipywidgets as widgets
from ipywidgets import interact
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
data = {'Name':['Tom', 'Nick', 'Chris', 'Jack'],
'Age':['20-25', '19<', '>75', '20-25'],
'Year':[2019,2019,2018,2018],
'Count': [1,1,1,1]}
df = pd.DataFrame(data)
請注意,條目的長度為 1000 秒,但我不想使用那么多空間,所以我使用了一個非常簡化的版本。
我正在嘗試使用該資料制作帶有 ipywidgets 的互動式條形圖。
age = ['20-25', '19<', '>75','20-25']
@interact(Age = age)
def f(Age):
df2= df[df['age'].str.contains(Age)].groupby('Year').sum()
df2['year'] = ['2018','2019']
return sns.barplot(x="Year", y="Count", data=df2)
x 軸是年份,y 軸是當年的參與者數量,您可以通過滾動條互動式過濾,并按您選擇的年齡范圍查看參與者數量。
我不知道該怎么做,所以我嘗試“暴力破解”并添加了一個計數列 1,這樣即使資料集被過濾了,我也能得到參與者的總數。我也蠻力過這些年,但有些年齡范圍并不是所有年份都在競爭,所以它壞了,它不起作用。
年齡是所有年齡范圍的各種選項,我把它們都放在一個串列中。
uj5u.com熱心網友回復:
- 修復拼寫問題,因為您要互換大寫和小寫。此外,資料框中的所有值都不是數字值(這兩個問題都在對 OP 的編輯中修復)。
- 創建
age與age = df.Age.unique() - 重置索引而不是使用
df2['year'] = ['2018','2019']
age = df.Age.unique()
@interact(Age = age)
def f(Age):
df2 = df[df['Age'].str.contains(Age)].groupby('Year').count().reset_index()
return sns.barplot(x="Year", y="Count", data=df2)



- 不加
'Count'列 - 無需向
'Count'資料框中添加列,因為.groupby('Year').count()將為每個現有列提供計數,在這種情況下y=可以是'Name'或'Age',但隨后ylabel需要更改 。
age = df.Age.unique()
@interact(Age = age)
def f(Age):
df2 = df[df['Age'].str.contains(Age)].groupby('Year').count().reset_index()
p = sns.barplot(x="Year", y="Age", data=df2)
p.set_ylabel('Count')
return p
- 使用
seaborn.countplot替代
age = df.Age.unique()
@interact(Age = age)
def f(Age):
data = df[df['Age'].str.contains(Age)]
return sns.countplot(data=data, x='Year')
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/374587.html
標籤:Python 熊猫 matplotlib 海生 小部件
