簡體   English   中英

熊貓系列地圖

[英]Pandas map on series

我有一個帶有很多類別的DataFrame,但是我只想使用兩個。 我設法獲得了想要的結果,但是在我的項目中沒有被接受(“有更好的方法”)。 使用2列-性別(M / F)和顯示(1/0),我嘗試獲取4個變量:male1,male0,female1,female0,以使用它們創建條形圖。

有人告訴我要使用pd.series.map函數,但是到處都找不到,也找不到很好的例子-也不確定如何從中獲取4個變量。

謝謝你的幫助。

pd.Series.map是不必要的。 您可以在此處使用GroupBy並輸出字典:

df = pd.DataFrame([['M', 0], ['M', 1], ['M', 1], ['F', 0], ['F', 0], ['F', 1]],
                  columns=['Gender', 'Showed'])

d = df.groupby(['Gender', 'Showed']).size().to_dict()

# {('F', 0): 2, ('F', 1): 1, ('M', 0): 1, ('M', 1): 2}

通常,應避免創建數量可變的變量。 詞典允許您有效地提取值,例如通過d[('F', 0)]表示女性性別,顯示0。


但是,如果確實必須使用map ,則可以使用pd.Index.map版本:

d = df.groupby(['Gender', 'Showed']).size()

res = df.drop_duplicates()
res['Counts'] = res.set_index(['Gender', 'Showed']).index.map(d.get)

print(res)

  Gender  Showed  Counts
0      M       0       1
1      M       1       2
3      F       0       2
5      F       1       1

這似乎是crosstab一種情況(這是一個內置函數:D)

import pandas as pd
df = pd.DataFrame([['M', 0], ['M', 1], ['M', 1], ['F', 0], ['F', 0], ['F', 1]],
                  columns=['Gender', 'Showed'])

pd.crosstab(df.Gender, df.Showed)

輸出:

Showed  0  1
Gender      
F       2  1
M       1  2

您可以通過4條簡單的代碼行來完成此操作。

male0 = ((df['Gender'] == 'M') & (df['Showed'] == 0)).sum()
female0 = ((df['Gender'] == 'F') & (df['Showed'] == 0)).sum()
male1 = ((df['Gender'] == 'M') & (df['Showed'] == 1)).sum()
female1 = ((df['Gender'] == 'F') & (df['Showed'] == 1)).sum()

使用apply ,因為您需要兩個系列而不是一個系列,所以需要使用apply

male0 = df[['Gender', 'Showed']].apply(lambda row: row['Gender'] == 'M' and row['Showed'] == 0, axis=1).sum() 
female0 = df[['Gender', 'Showed']].apply(lambda row: row['Gender'] == 'F' and row['Showed'] == 0, axis=1).sum() 
male1 = df[['Gender', 'Showed']].apply(lambda row: row['Gender'] == 'M' and row['Showed'] == 1, axis=1).sum() 
female1 = df[['Gender', 'Showed']].apply(lambda row: row['Gender'] == 'F' and row['Showed'] == 1, axis=1).sum() 

使用groupby

counts = df.groupby(['Gender', 'Showed']).size().reset_index(name='Count')   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM