apply and groupbyimport pandas as pd
data_url = 'https://facultyweb.cs.wwu.edu/~wehrwes/courses/data311_21f/data/avengers/avengers.csv'
df = pd.read_csv(data_url, encoding='latin-1')
df
| URL | Name/Alias | Appearances | Current? | Gender | Probationary Introl | Full/Reserve Avengers Intro | Year | Years since joining | Honorary | ... | Return1 | Death2 | Return2 | Death3 | Return3 | Death4 | Return4 | Death5 | Return5 | Notes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | http://marvel.wikia.com/Henry_Pym_(Earth-616) | Henry Jonathan "Hank" Pym | 1269 | YES | MALE | NaN | Sep-63 | 1963 | 52 | Full | ... | NO | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Merged with Ultron in Rage of Ultron Vol. 1. A... |
| 1 | http://marvel.wikia.com/Janet_van_Dyne_(Earth-... | Janet van Dyne | 1165 | YES | FEMALE | NaN | Sep-63 | 1963 | 52 | Full | ... | YES | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Dies in Secret Invasion V1:I8. Actually was se... |
| 2 | http://marvel.wikia.com/Anthony_Stark_(Earth-616) | Anthony Edward "Tony" Stark | 3068 | YES | MALE | NaN | Sep-63 | 1963 | 52 | Full | ... | YES | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Death: "Later while under the influence of Imm... |
| 3 | http://marvel.wikia.com/Robert_Bruce_Banner_(E... | Robert Bruce Banner | 2089 | YES | MALE | NaN | Sep-63 | 1963 | 52 | Full | ... | YES | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Dies in Ghosts of the Future arc. However "he ... |
| 4 | http://marvel.wikia.com/Thor_Odinson_(Earth-616) | Thor Odinson | 2402 | YES | MALE | NaN | Sep-63 | 1963 | 52 | Full | ... | YES | YES | NO | NaN | NaN | NaN | NaN | NaN | NaN | Dies in Fear Itself brought back because that'... |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 168 | http://marvel.wikia.com/Eric_Brooks_(Earth-616)# | Eric Brooks | 198 | YES | MALE | NaN | 13-Nov | 2013 | 2 | Full | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 169 | http://marvel.wikia.com/Adam_Brashear_(Earth-6... | Adam Brashear | 29 | YES | MALE | NaN | 14-Jan | 2014 | 1 | Full | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 170 | http://marvel.wikia.com/Victor_Alvarez_(Earth-... | Victor Alvarez | 45 | YES | MALE | NaN | 14-Jan | 2014 | 1 | Full | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 171 | http://marvel.wikia.com/Ava_Ayala_(Earth-616)# | Ava Ayala | 49 | YES | FEMALE | NaN | 14-Jan | 2014 | 1 | Full | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 172 | http://marvel.wikia.com/Kaluu_(Earth-616)# | Kaluu | 35 | YES | MALE | NaN | 15-Jan | 2015 | 0 | Full | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
173 rows × 21 columns
apply: for when you can't find the function that does the thing¶I literally can't think of a good example right now, so here's a bad one. I want to add a new column and sort by the nubmer of appearances per year:
def apy(row):
return row["Appearances"] / (2016 - row["Year"])
df["Appearances Per Year"] = df.apply(apy, axis="columns")
df.sort_values("Appearances Per Year", ascending=False)[["Name/Alias", "Year", "Appearances Per Year"]]
| Name/Alias | Year | Appearances Per Year | |
|---|---|---|---|
| 140 | Ororo Munroe | 2012 | 399.500000 |
| 151 | Anna Marie | 2013 | 292.333333 |
| 92 | James "Logan" Howlett | 2005 | 284.545455 |
| 141 | Matt Murdock | 2011 | 275.000000 |
| 145 | Samuel Guthrie | 2013 | 226.333333 |
| 143 | Otto Octavius | 2013 | 187.000000 |
| 142 | Flash Thompson | 2012 | 186.500000 |
| 73 | Peter Benjamin Parker | 1990 | 166.653846 |
| 146 | Roberto da Costa | 2013 | 163.666667 |
| 144 | Alex Summers | 2012 | 148.000000 |
| 104 | Doctor Stephen Vincent Strange | 2007 | 147.111111 |
| 116 | Brian Braddock | 2010 | 90.833333 |
| 119 | Thaddeus Ross | 2011 | 83.400000 |
| 106 | James Buchanan Barnes | 2008 | 82.875000 |
| 90 | Carl Lucas | 2005 | 80.545455 |
| 57 | Reed Richards | 1989 | 78.703704 |
| 157 | Sam Alexander | 2015 | 78.000000 |
| 40 | Benjamin Jacob Grimm | 1986 | 76.833333 |
| 103 | Daniel Thomas Rand K'ai | 2007 | 69.888889 |
| 6 | Steven Rogers | 1964 | 66.500000 |
| 168 | Eric Brooks | 2013 | 66.000000 |
| 107 | Jessica Miriam Drew | 2008 | 65.625000 |
| 58 | Susan Richards (nee Storm) | 1989 | 65.222222 |
| 70 | Wade Wilson | 2007 | 63.888889 |
| 115 | Richard Rider | 2010 | 63.333333 |
| 121 | Shang-Chi | 2011 | 62.000000 |
| 114 | Brunnhilde | 2010 | 61.500000 |
| 110 | Maria Hill | 2010 | 59.833333 |
| 152 | Shiro Yoshida | 2013 | 58.666667 |
| 2 | Anthony Edward "Tony" Stark | 1963 | 57.886792 |
| ... | ... | ... | ... |
| 89 | Kelsey Leigh Shorr | 2004 | 2.000000 |
| 53 | Ravonna Lexus Renslayer | 1988 | 1.464286 |
| 69 | NaN | 2005 | 1.454545 |
| 75 | Elvin Haliday | 1900 | 1.362069 |
| 82 | Anthony Edward Stark | 1996 | 1.350000 |
| 60 | Ashley Crawford | 1989 | 1.333333 |
| 128 | Julie Power | 1900 | 1.318966 |
| 79 | Phillip Javert | 1992 | 1.291667 |
| 63 | Val Ventura | 1989 | 1.259259 |
| 64 | Craig Hollis | 1989 | 1.222222 |
| 80 | NaN | 1993 | 1.217391 |
| 62 | DeMarr Davis | 1989 | 1.148148 |
| 117 | Dennis Sykes | 2010 | 1.000000 |
| 134 | Anya Corazon | 1900 | 0.931034 |
| 83 | "Giulietta Nefaria" | 1996 | 0.900000 |
| 61 | NaN | 1989 | 0.814815 |
| 137 | Michiko Musashi | 1900 | 0.810345 |
| 67 | NaN | 2005 | 0.636364 |
| 129 | Alani Ryan | 1900 | 0.629310 |
| 136 | Kevin Masterson | 1900 | 0.534483 |
| 133 | Lyra | 1900 | 0.474138 |
| 132 | Johnny Gallo | 1900 | 0.370690 |
| 65 | Gene Lorrene | 2005 | 0.363636 |
| 122 | James Santini | 1900 | 0.344828 |
| 68 | Doug Taggert | 2005 | 0.272727 |
| 123 | Emery Schaub | 1900 | 0.224138 |
| 127 | Yvette | 1900 | 0.189655 |
| 138 | Taki Matsuya | 1900 | 0.155172 |
| 39 | Moira Brandon | 1993 | 0.086957 |
| 125 | Fiona | 1900 | 0.017241 |
173 rows × 3 columns
Why was that a bad example? Because there's a better way:
df["Appearances Per Year 2"] = df["Appearances"] / (2016 - df["Year"])
df.sort_values("Appearances Per Year 2", ascending=False)[["Name/Alias", "Appearances Per Year", "Appearances Per Year 2"]]
| Name/Alias | Appearances Per Year | Appearances Per Year 2 | |
|---|---|---|---|
| 140 | Ororo Munroe | 399.500000 | 399.500000 |
| 151 | Anna Marie | 292.333333 | 292.333333 |
| 92 | James "Logan" Howlett | 284.545455 | 284.545455 |
| 141 | Matt Murdock | 275.000000 | 275.000000 |
| 145 | Samuel Guthrie | 226.333333 | 226.333333 |
| 143 | Otto Octavius | 187.000000 | 187.000000 |
| 142 | Flash Thompson | 186.500000 | 186.500000 |
| 73 | Peter Benjamin Parker | 166.653846 | 166.653846 |
| 146 | Roberto da Costa | 163.666667 | 163.666667 |
| 144 | Alex Summers | 148.000000 | 148.000000 |
| 104 | Doctor Stephen Vincent Strange | 147.111111 | 147.111111 |
| 116 | Brian Braddock | 90.833333 | 90.833333 |
| 119 | Thaddeus Ross | 83.400000 | 83.400000 |
| 106 | James Buchanan Barnes | 82.875000 | 82.875000 |
| 90 | Carl Lucas | 80.545455 | 80.545455 |
| 57 | Reed Richards | 78.703704 | 78.703704 |
| 157 | Sam Alexander | 78.000000 | 78.000000 |
| 40 | Benjamin Jacob Grimm | 76.833333 | 76.833333 |
| 103 | Daniel Thomas Rand K'ai | 69.888889 | 69.888889 |
| 6 | Steven Rogers | 66.500000 | 66.500000 |
| 168 | Eric Brooks | 66.000000 | 66.000000 |
| 107 | Jessica Miriam Drew | 65.625000 | 65.625000 |
| 58 | Susan Richards (nee Storm) | 65.222222 | 65.222222 |
| 70 | Wade Wilson | 63.888889 | 63.888889 |
| 115 | Richard Rider | 63.333333 | 63.333333 |
| 121 | Shang-Chi | 62.000000 | 62.000000 |
| 114 | Brunnhilde | 61.500000 | 61.500000 |
| 110 | Maria Hill | 59.833333 | 59.833333 |
| 152 | Shiro Yoshida | 58.666667 | 58.666667 |
| 2 | Anthony Edward "Tony" Stark | 57.886792 | 57.886792 |
| ... | ... | ... | ... |
| 89 | Kelsey Leigh Shorr | 2.000000 | 2.000000 |
| 53 | Ravonna Lexus Renslayer | 1.464286 | 1.464286 |
| 69 | NaN | 1.454545 | 1.454545 |
| 75 | Elvin Haliday | 1.362069 | 1.362069 |
| 82 | Anthony Edward Stark | 1.350000 | 1.350000 |
| 60 | Ashley Crawford | 1.333333 | 1.333333 |
| 128 | Julie Power | 1.318966 | 1.318966 |
| 79 | Phillip Javert | 1.291667 | 1.291667 |
| 63 | Val Ventura | 1.259259 | 1.259259 |
| 64 | Craig Hollis | 1.222222 | 1.222222 |
| 80 | NaN | 1.217391 | 1.217391 |
| 62 | DeMarr Davis | 1.148148 | 1.148148 |
| 117 | Dennis Sykes | 1.000000 | 1.000000 |
| 134 | Anya Corazon | 0.931034 | 0.931034 |
| 83 | "Giulietta Nefaria" | 0.900000 | 0.900000 |
| 61 | NaN | 0.814815 | 0.814815 |
| 137 | Michiko Musashi | 0.810345 | 0.810345 |
| 67 | NaN | 0.636364 | 0.636364 |
| 129 | Alani Ryan | 0.629310 | 0.629310 |
| 136 | Kevin Masterson | 0.534483 | 0.534483 |
| 133 | Lyra | 0.474138 | 0.474138 |
| 132 | Johnny Gallo | 0.370690 | 0.370690 |
| 65 | Gene Lorrene | 0.363636 | 0.363636 |
| 122 | James Santini | 0.344828 | 0.344828 |
| 68 | Doug Taggert | 0.272727 | 0.272727 |
| 123 | Emery Schaub | 0.224138 | 0.224138 |
| 127 | Yvette | 0.189655 | 0.189655 |
| 138 | Taki Matsuya | 0.155172 | 0.155172 |
| 39 | Moira Brandon | 0.086957 | 0.086957 |
| 125 | Fiona | 0.017241 | 0.017241 |
173 rows × 3 columns
groupby: a split-apply-combine multitool¶This is way more powerful than what I'll show you here, but this is the basics. There's a very extensive section of the user guide devoted to just this function - check it out here: https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html
av = df[["Name/Alias", "Appearances", "Gender", "Year", "Honorary"]]
av["Honorary"].value_counts()
Full 138 Academy 17 Honorary 16 Probationary 2 Name: Honorary, dtype: int64
grouped = av.groupby("Honorary")
grouped
<pandas.core.groupby.DataFrameGroupBy object at 0x7fbb24082358>
grouped.get_group("Academy")
| Name/Alias | Appearances | Gender | Year | Honorary | |
|---|---|---|---|---|---|
| 122 | James Santini | 40 | MALE | 1900 | Academy |
| 123 | Emery Schaub | 26 | MALE | 1900 | Academy |
| 124 | Jeanne Foucault | 63 | FEMALE | 2010 | Academy |
| 125 | Fiona | 2 | FEMALE | 1900 | Academy |
| 126 | Jennifer Takeda | 73 | FEMALE | 2010 | Academy |
| 127 | Yvette | 22 | FEMALE | 1900 | Academy |
| 128 | Julie Power | 153 | FEMALE | 1900 | Academy |
| 129 | Alani Ryan | 73 | FEMALE | 1900 | Academy |
| 130 | Ken Mack | 59 | MALE | 2010 | Academy |
| 131 | Humberto Lopez | 66 | MALE | 2010 | Academy |
| 132 | Johnny Gallo | 43 | MALE | 1900 | Academy |
| 133 | Lyra | 55 | FEMALE | 1900 | Academy |
| 134 | Anya Corazon | 108 | FEMALE | 1900 | Academy |
| 135 | Brandon Sharpe | 64 | MALE | 2010 | Academy |
| 136 | Kevin Masterson | 62 | MALE | 1900 | Academy |
| 137 | Michiko Musashi | 94 | FEMALE | 1900 | Academy |
| 138 | Taki Matsuya | 18 | MALE | 1900 | Academy |
for group_name, group in grouped:
print(group_name)
print(group)
Academy
Name/Alias Appearances Gender Year Honorary
122 James Santini 40 MALE 1900 Academy
123 Emery Schaub 26 MALE 1900 Academy
124 Jeanne Foucault 63 FEMALE 2010 Academy
125 Fiona 2 FEMALE 1900 Academy
126 Jennifer Takeda 73 FEMALE 2010 Academy
127 Yvette 22 FEMALE 1900 Academy
128 Julie Power 153 FEMALE 1900 Academy
129 Alani Ryan 73 FEMALE 1900 Academy
130 Ken Mack 59 MALE 2010 Academy
131 Humberto Lopez 66 MALE 2010 Academy
132 Johnny Gallo 43 MALE 1900 Academy
133 Lyra 55 FEMALE 1900 Academy
134 Anya Corazon 108 FEMALE 1900 Academy
135 Brandon Sharpe 64 MALE 2010 Academy
136 Kevin Masterson 62 MALE 1900 Academy
137 Michiko Musashi 94 FEMALE 1900 Academy
138 Taki Matsuya 18 MALE 1900 Academy
Full
Name/Alias Appearances Gender Year Honorary
0 Henry Jonathan "Hank" Pym 1269 MALE 1963 Full
1 Janet van Dyne 1165 FEMALE 1963 Full
2 Anthony Edward "Tony" Stark 3068 MALE 1963 Full
3 Robert Bruce Banner 2089 MALE 1963 Full
4 Thor Odinson 2402 MALE 1963 Full
6 Steven Rogers 3458 MALE 1964 Full
7 Clinton Francis Barton 1456 MALE 1965 Full
8 Pietro Maximoff 769 MALE 1965 Full
9 Wanda Maximoff 1214 FEMALE 1965 Full
10 Jacques Duquesne 115 MALE 1965 Full
11 Heracles 741 MALE 1967 Full
12 T'Challa 780 MALE 1968 Full
13 Victor Shade (alias) 1036 MALE 1968 Full
14 Dane Whitman 482 MALE 1969 Full
15 Natalia Alianovna Romanova 1112 FEMALE 1973 Full
16 Brandt 160 FEMALE 1973 Full
17 Henry P. McCoy 1886 MALE 1976 Full
18 Heather Douglas 332 FEMALE 1976 Full
19 Patsy Walker 557 FEMALE 1976 Full
20 Matthew Liebowitz (birth name) 197 MALE 1975 Full
21 Robert L. Frank Sr. 106 MALE 1978 Full
22 Simon Williams 692 MALE 1979 Full
29 Mar-Vell 254 MALE 1978 Full
30 Carol Susan Jane Danvers 935 FEMALE 1979 Full
31 Samuel Thomas Wilson 576 MALE 1979 Full
32 Jocasta 141 FEMALE 1988 Full
33 Greer Grant Nelson 355 FEMALE 1981 Full
34 Jennifer Walters 933 FEMALE 1982 Full
35 Monica Rambeau 348 FEMALE 1983 Full
36 Eros 206 MALE 1984 Full
.. ... ... ... ... ...
141 Matt Murdock 1375 MALE 2011 Full
143 Otto Octavius 561 MALE 2013 Full
144 Alex Summers 592 MALE 2012 Full
145 Samuel Guthrie 679 MALE 2013 Full
146 Roberto da Costa 491 MALE 2013 Full
147 Eden Fesi 65 MALE 2013 Full
148 NaN 55 MALE 2013 Full
149 Izzy Kane 44 FEMALE 2013 Full
150 Marcus Milton 65 MALE 2013 Full
151 Anna Marie 877 FEMALE 2013 Full
152 Shiro Yoshida 176 MALE 2013 Full
153 NaN 24 MALE 2013 Full
154 NaN 25 FEMALE 2013 Full
155 Adam 35 MALE 2013 Full
156 Kevin Kale Connor 44 MALE 2013 Full
158 America Chavez 22 FEMALE 2013 Full
159 Loki Laufeyson 77 MALE 2013 Full
160 David Alleyne 115 MALE 2013 Full
161 Nicholas Fury, Jr., Marcus Johnson 77 MALE 2013 Full
162 Phillip Coulson 69 MALE 2013 Full
163 Tony Masters 173 MALE 2013 Full
164 Victor Mancha 75 MALE 2013 Full
165 Monica Chang 12 FEMALE 2013 Full
166 NaN 14 MALE 2013 Full
167 Alexis 13 FEMALE 2013 Full
168 Eric Brooks 198 MALE 2013 Full
169 Adam Brashear 29 MALE 2014 Full
170 Victor Alvarez 45 MALE 2014 Full
171 Ava Ayala 49 FEMALE 2014 Full
172 Kaluu 35 MALE 2015 Full
[138 rows x 5 columns]
Honorary
Name/Alias Appearances Gender Year Honorary
5 Richard Milhouse Jones 612 MALE 1963 Honorary
23 Yondu Udonta 109 MALE 1978 Honorary
24 Martinex T'Naga 100 MALE 1978 Honorary
25 Charlie-27 132 MALE 1978 Honorary
26 Nicholette Gold 108 FEMALE 1978 Honorary
27 Stakar 100 MALE 1978 Honorary
28 Vance Astrovik 156 MALE 1978 Honorary
39 Moira Brandon 2 FEMALE 1993 Honorary
51 Anthony Ludgate Druid 158 MALE 1987 Honorary
54 Rita DeMara 68 FEMALE 1988 Honorary
79 Phillip Javert 31 MALE 1992 Honorary
80 NaN 28 FEMALE 1993 Honorary
81 NaN 50 FEMALE 1993 Honorary
83 "Giulietta Nefaria" 18 FEMALE 1996 Honorary
142 Flash Thompson 746 MALE 2012 Honorary
157 Sam Alexander 78 MALE 2015 Honorary
Probationary
Name/Alias Appearances Gender Year Honorary
75 Elvin Haliday 158 MALE 1900 Probationary
76 William Baker 355 MALE 1900 Probationary
import pandas as pd
def data_url(city_name):
base_url = "https://facultyweb.cs.wwu.edu/~wehrwes/courses/csci141_21s/fp/data/"
return base_url + city_name + ".csv"
ham = pd.read_csv(data_url("WA_Bellingham"), parse_dates=["DATE"], index_col="DATE", low_memory=False)
ham
| STATION | REPORT_TYPE | SOURCE | AWND | BackupDirection | BackupDistance | BackupDistanceUnit | BackupElements | BackupElevation | BackupElevationUnit | ... | ShortDurationPrecipitationValue060 | ShortDurationPrecipitationValue080 | ShortDurationPrecipitationValue100 | ShortDurationPrecipitationValue120 | ShortDurationPrecipitationValue150 | ShortDurationPrecipitationValue180 | Sunrise | Sunset | TStorms | WindEquipmentChangeDate | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| DATE | |||||||||||||||||||||
| 2020-01-01 00:14:00 | 72797624217 | FM-16 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 00:24:00 | 72797624217 | FM-16 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 00:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 01:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 02:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 03:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 04:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 05:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 06:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 07:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 08:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 09:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 10:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 11:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 12:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 13:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 14:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 15:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 16:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 17:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 18:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 19:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 20:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 21:27:00 | 72797624217 | FM-16 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 21:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 22:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 23:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-01 23:59:00 | 72797624217 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 804.0 | 1624.0 | NaN | NaN |
| 2020-01-02 00:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-01-02 01:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2020-12-31 06:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 07:10:00 | 72797624217 | FM-16 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 07:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 08:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 09:18:00 | 72797624217 | FM-16 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 09:39:00 | 72797624217 | FM-16 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 09:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 10:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 11:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 12:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 13:53:00 | 72797624217 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 14:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 15:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 16:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 16:56:00 | 72797624217 | FM-16 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 17:15:00 | 72797624217 | FM-16 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 17:38:00 | 72797624217 | FM-16 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 17:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 17:55:00 | 72797624217 | FM-16 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 18:02:00 | 72797624217 | FM-16 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 18:09:00 | 72797624217 | FM-16 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 18:16:00 | 72797624217 | FM-16 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 18:43:00 | 72797624217 | FM-16 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 18:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 19:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 20:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 21:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 22:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 23:53:00 | 72797624217 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2020-12-31 23:59:00 | 72797624217 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 803.0 | 1624.0 | NaN | NaN |
11348 rows × 123 columns
def getmonth(x):
return x.month
ham_months = ham.groupby(getmonth)
ham_months["HourlyStationPressure"].mean() # average hourly station pressure for each month in bham!
1 29.748956 2 30.035164 3 29.873802 4 29.932981 5 29.831512 6 29.857882 7 29.879794 8 29.858571 9 29.882062 10 29.938026 11 29.848293 12 29.944674 Name: HourlyStationPressure, dtype: float64
partners = ["Andrew", "Jordan", "Jeremy", "Mary", "Van", "Jason", "Caleb", "Mayla"]
import random
random.shuffle(partners)
partners
['Jeremy', 'Caleb', 'Van', 'Andrew', 'Jason', 'Mary', 'Jordan', 'Mayla']
pd.DataFrame(partners[0::2], partners[1::2])
| 0 | |
|---|---|
| Caleb | Jeremy |
| Andrew | Van |
| Mary | Jason |
| Mayla | Jordan |
import random
missing = ["Peter", "Mason", "Eric", "Will", "Cindy", None]
random.shuffle(missing)
pd.DataFrame(missing[0::2],missing[1::2])
| 0 | |
|---|---|
| NaN | Mason |
| Cindy | Eric |
| Will | Peter |