将空行添加到python数据框

时间:2018-08-08 13:33:40

标签: python python-3.x pandas dataframe

我有一个如下所示的pd.dataframe df

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

因此,现在基于key_value, 我想在每个键段的末尾添加说n(现在为3)数量的空行,因此它应该类似于:

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

我曾尝试过基于grouby使用lease的方法,但无法弄清楚该怎么做。 谢谢您预先提供的所有帮助。

1 个答案:

答案 0 :(得分:3)

这应该起作用: 首先找到值更改的行的索引,然后从底部插入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']

输出:

   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