apply
and groupby
import 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 |