2017-07-05 19 views
1

我有一個小數據幀,看起來有點像這樣:只有熊貓數據框中每列的Seaborn圖?

csv = [{"Oranges" : 12, "Apples" : 4, "Kiwis" : "Yes"}, {"Oranges" : 1, "Apples" : 8, "Kiwis" : "No"}, {"Oranges" : 1, "Apples" : 14, "Kiwis" : "Yes"}, {"Oranges" : 11, "Apples" : 3, "Kiwis" : "No"}, ] 
df = pd.DataFrame(csv) 

,它有更多的cols。我想繪製每列的海底小提琴劇情。如果我手動創建每列的情節,它看起來有點像這樣:

sns.violinplot(y="Oranges", x="Kiwis", data=df, split=True, inner="quart") 
sns.violinplot(y="Apples", x="Kiwis", data=df, split=True, inner="quart") 

然而,鑑於約100的cols,我想通過數據框山坳循環山口。

我試圖建立一個微小的功能類似如下:

def violin(col): 
    sns.violinplot(y=col, x="Kiwis", data=df, split=True, inner="quart") 

我的想法是使用apply()使用它的每一列...但它doesent工作這麼遠。任何想法?

回答

1

可以使用differenceKiwis列,然後由子集[]使用apply與選擇列:

import matplotlib.pyplot as plt 

def violin(col): 
    sns.violinplot(y=col, x="Kiwis", data=df, split=True, inner="quart") 
    plt.figure() 


cols = df.columns.difference(['Kiwis']) 
df[cols].apply(violin) 
+1

繪製我有以下錯誤:' 「石斑魚關於 '<類 'pandas.core.frame.DataFrame'>' 不爲1維」, '發生在索引類別')「'。我開始將'df'定義爲'df_num = df.select_dtypes(include = [np.float])''。現在它完美的工作!謝謝! – Rachel

1

我想你只需要稍微重新格式化您的數據幀那麼你可以做整個情節在一個呼叫:

df = pd.melt(df, "Kiwis", var_name="Fruit", value_name="Value") 

使事情看起來像

Kiwis Fruit Value 
0 Yes Apples  4 
1 No Apples  8 
2 Yes Apples  14 
3 No Apples  3 
4 Yes Oranges  12 
5 No Oranges  1 
6 Yes Oranges  1 
7 No Oranges  11 

哪個是簡單與

sns.violinplot(x="Fruit", y="Value", hue="Kiwis", data=df, 
      split=True, inner="quart") 

enter image description here

+0

非常酷的解決方案!但是,我得到了大約200個數字 - 因此,在這種情況下,對於個人情節的解決方案似乎更好。 – Rachel