2017-09-02 66 views
2

我與大熊貓工作的水平和我使用的GROUPBY:在數據幀變換系列(熊貓/ Python)的其中列有各系列的

group = df_crimes_query.groupby(["CrimeDateTime", "WeaponFactor"]).size() 
group.head(20) 


CrimeDateTime WeaponFactor 
2016-01-01  FIREARM   11 
       HANDS   26 
       KNIFE    3 
       OTHER   11 
       UNDEFINED  102 
2016-01-02  FIREARM   10 
       HANDS   21 
       KNIFE    8 
       OTHER    6 
       UNDEFINED  68 
2016-01-03  FIREARM   12 
       HANDS   13 
       KNIFE    6 
       OTHER    5 
       UNDEFINED  73 
2016-01-04  FIREARM   11 
       HANDS   10 
       KNIFE    1 
       OTHER    3 
       UNDEFINED  84 
dtype: int64 

類型的它是一個系列:

type(group) 

pandas.core.series.Series 

我想關於這樣的數據幀:

CrimeDateTime FIREARM  HANDS KNIFE OTHER UNDEFINED 
2016-01-01  11   26  3  11  102 
2016-01-02  10   21  8  6  68 
2016-01-03  12   13  6  5  73 
2016-01-04  11   10  1  3  84 

我想爲我繪製5蒂姆使用這個數據幀e系列之後,每種類型(火警,手等)。我嘗試過,在網上搜索,但沒有成功。

的代碼是在我的GitHub(在部分稱爲測試):https://github.com/rmmariano/CAP386_intro_data_science/blob/master/projeto/crimes_baltimore/crimes_baltimore.ipynb

我有其他的測試代碼,但是我已經刪除是最清楚的。

有人有什麼想法嗎?

回答

2

選項1
簡單和緩慢

pd.crosstab(df.CrimeDateTime, df.WeaponFactor) 

WeaponFactor FIREARM HANDS KNIFE OTHER UNDEFINED 
CrimeDateTime           
2016-01-01   11  26  3  11  102 
2016-01-02   10  21  8  6   68 
2016-01-03   12  13  6  5   73 
2016-01-04   11  10  1  3   84 

選項2
更快,酷!

pd.get_dummies(df.CrimeDateTime).T.dot(pd.get_dummies(df.WeaponFactor)) 

      FIREARM HANDS KNIFE OTHER UNDEFINED 
2016-01-01  11  26  3  11  102 
2016-01-02  10  21  8  6   68 
2016-01-03  12  13  6  5   73 
2016-01-04  11  10  1  3   84 

選項3
下一級別功夫熊貓!

i, r = pd.factorize(df.CrimeDateTime.values) 
j, c = pd.factorize(df.WeaponFactor.values) 
n, m = r.size, c.size 
b = np.bincount(j + i * m, minlength=n * m).reshape(n, m) 

pd.DataFrame(b, r, c) 

      FIREARM HANDS KNIFE OTHER UNDEFINED 
2016-01-01  11  26  3  11  102 
2016-01-02  10  21  8  6   68 
2016-01-03  12  13  6  5   73 
2016-01-04  11  10  1  3   84 
+0

令人驚歎。太棒了,先生。 – Dark

+1

這是功夫熊貓:) – Vaishali

+0

非常感謝,它很棒:D – rmmariano

1

你會得到使用所需的結果

df_crimes_query.groupby(["CrimeDateTime", "WeaponFactor"]).size().unstack().reset_index() 
+0

非常感謝:D – rmmariano

1

相反GROUPBY,您可以使用數據透視表即

df.pivot_table(index='CrimeDateTime',columns='WeaponFactor',values='count') 

基於在筆記本你的代碼,如果你有這樣

一個數據幀的
 
    CrimeDateTime WeaponFactor count 
0  2016-01-01  FIREARM  11 
1  2016-01-01  HANDS  26 
2  2016-01-01  KNIFE  3 
3  2016-01-01  OTHER  11 
4  2016-01-01 UNDEFINED 102 
5  2016-01-02  FIREARM  10 
6  2016-01-02  HANDS  21 
7  2016-01-02  KNIFE  8 
8  2016-01-02  OTHER  6 
9  2016-01-02 UNDEFINED  68 
10 2016-01-03  FIREARM  12 
11 2016-01-03  HANDS  13 
12 2016-01-03  KNIFE  6 
13 2016-01-03  OTHER  5 
14 2016-01-03 UNDEFINED  73 
15 2016-01-04  FIREARM  11 
16 2016-01-04  HANDS  10 
17 2016-01-04  KNIFE  1 
18 2016-01-04  OTHER  3 
19 2016-01-04 UNDEFINED  84 

輸出:

df.pivot_table(index='CrimeDateTime',columns='WeaponFactor',values='count') 
 
WeaponFactor FIREARM HANDS KNIFE OTHER UNDEFINED 
CrimeDateTime           
2016-01-01   11  26  3  11  102 
2016-01-02   10  21  8  6   68 
2016-01-03   12  13  6  5   73 
2016-01-04   11  10  1  3   84 
In [595]: 
+0

謝謝Bharath:D – rmmariano