I have a pd.dataframe df
that looks like this:
key_value a date b
value_01 1 03/17/2018 10
value_01 2 03/18/2018 12
value_01 3 03/19/2018 13
value_02 1 04/01/2018 24
value_02 2 04/02/2018 27
value_02 3 04/03/2018 33
value_03 1 03/17/2018 13
value_03 2 03/18/2018 17
value_03 3 03/19/2018 22
So now based on the key_value, I want to add say n
(3 for now) amount of Empty Rows at the end of each key segment, so it should look something like this:
key_value a date b
value_01 1 03/17/2018 10
value_01 2 03/18/2018 12
value_01 3 03/19/2018 13
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
value_02 1 04/01/2018 24
value_02 2 04/02/2018 27
value_02 3 04/03/2018 33
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
value_03 1 03/17/2018 13
value_03 2 03/18/2018 17
value_03 3 03/19/2018 22
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
I have tried thinking of a way using grouby
based on lease
, but couldn't figure out how to do it. Thank you for all your help in advance.
This should work: First find the index of the rows where the values change, and then from the bottom insert the NaN
.
l = df.index[(df.key_value != df.key_value.shift(-1)) == True].tolist()
a = [np.nan, np.nan, np.nan, np.nan]
for i in reversed([x+1 for x in l]):
for j in range(3):
df = pd.DataFrame(np.insert(df.values, i, values=a, axis=0))
df.columns = ['key_value','a', 'date', 'b']
Output:
key_value a date b
0 value_01 1 03/17/2018 10
1 value_01 2 03/18/2018 12
2 value_01 3 03/19/2018 13
3 NaN NaN NaN NaN
4 NaN NaN NaN NaN
5 NaN NaN NaN NaN
6 value_02 1 04/01/2018 24
7 value_02 2 04/02/2018 27
8 value_02 3 04/03/2018 33
9 NaN NaN NaN NaN
10 NaN NaN NaN NaN
11 NaN NaN NaN NaN
12 value_03 1 03/17/2018 13
13 value_03 2 03/18/2018 17
14 value_03 3 03/19/2018 22
15 NaN NaN NaN NaN
16 NaN NaN NaN NaN
17 NaN NaN NaN NaN
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.