With the following DataFrame, how can I shift the "beyer" column based on the index without having Pandas assign the shifted value to a different index value?
                  line_date  line_race  beyer horse                                         Last Gunfighter  2013-09-28         10     99 Last Gunfighter  2013-08-18         10    102 Last Gunfighter  2013-07-06          8    103 ..... Paynter          2013-09-28         10    103 Paynter          2013-08-31         10     88 Paynter          2013-07-27          8    100   df['beyer'].shift(1) produces...
                  line_date  line_race  beyer  beyer_shifted horse                                                        Last Gunfighter  2013-09-28         10     99            NaN Last Gunfighter  2013-08-18         10    102             99 Last Gunfighter  2013-07-06          8    103            102 ..... Paynter          2013-09-28         10    103             71 Paynter          2013-08-31         10     88            103 Paynter          2013-07-27          8    100             88   The problem is that Paynter was given a beyer that Last Gunfighter (his first record) was assigned. Instead I want it to go like this...
                  line_date  line_race  beyer  beyer_shifted horse                                                        Last Gunfighter  2013-09-28         10     99            NaN Last Gunfighter  2013-08-18         10    102             99 Last Gunfighter  2013-07-06          8    103            102 ..... Paynter          2013-09-28         10    103            NaN Paynter          2013-08-31         10     88            103 Paynter          2013-07-27          8    100             88 
                shift() If you want to shift your column or subtract the column value with the previous row value from the DataFrame, you can do it by using the shift() function. It consists of a scalar parameter called period, which is responsible for showing the number of shifts to be made over the desired axis.
shift() function Shift index by desired number of periods with an optional time freq. This function takes a scalar parameter called the period, which represents the number of shifts to be made over the desired axis. This function is very helpful when dealing with time-series data.
pandas MultiIndex to ColumnsUse pandas DataFrame. reset_index() function to convert/transfer MultiIndex (multi-level index) indexes to columns. The default setting for the parameter is drop=False which will keep the index values as columns and set the new index to DataFrame starting from zero.
pandas.DataFrame.shift ¶ DataFrame.shift(periods=1, freq=None, axis=0, fill_value=<no_default>) [source] ¶ Shift index by desired number of periods with an optional time freq. When freq is not passed, shift the index without realigning the data.
Accessing Data in a MultiIndex DataFrame in Pandas 1. Selecting data via the first level index When it comes to select data on a DataFrame, Pandas loc is one of the top... 2. Selecting data via multi-level index If you want to read London ’s Day weather on 2019–07–01, you can simply do: >>>... 3. ...
DataFrame.shift(periods=1, freq=None, axis=0, fill_value=<no_default>) [source] ¶ Shift index by desired number of periods with an optional time freq. When freq is not passed, shift the index without realigning the data.
Using shift () function in Pandas dataframe to shift the column axis to the negative direction. In the above program, we first import pandas as pd and afterward characterize the dataframe and rather than rowindex esteems, you will characterize all the columnindex esteems.
Use groupby/shift to apply the shift to each group individually: (Thanks to Jeff for pointing out this simplification.)
In [60]: df['beyer_shifted'] = df.groupby(level=0)['beyer'].shift(1); df Out[61]:                    line_date  line_race  beyer  beyer_shifted Last Gunfighter  2013-09-28         10     99            NaN Last Gunfighter  2013-08-18         10    102             99 Last Gunfighter  2013-07-06          8    103            102 Paynter          2013-09-28         10    103            NaN Paynter          2013-08-31         10     88            103 Paynter          2013-07-27          8    100             88   If you have a multiindex, you can group by more than one level by passing a sequence of ints or level names to groupby's level parameter.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With