简体   繁体   中英

Add empty rows to python dataframe

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM