2017-07-18 20 views
1

比方说,我有一个pandas数据帧像这样:值添加到不退出行

row_number  value 
1    21 
3    10234 
5    467 
6    395 
7    762 

# notice row_number == 2 and == 4 are missing 

非还存在排在那里row_number < 10(例如),我d喜欢插入与value == 0的行。也就是说,我想获得以下数据集:

row_number  value 
1    21 
3    10234 
5    467 
6    395 
7    762 
2    0 
4    0 
8    0 
9    0 

我甚至无法“选择”这些不存在的行。我试过这个:

my_df[my_df["row_number"] == i for i in range(10) if i not in 
my_df["row_number"]] 

但是我得到了invalid syntax error

我怎么能达到我想要的?谢谢。

回答

2

使用reindex通过rangeset_indexindexreset_index

df = df.set_index('row_number').reindex(range(1,10), fill_value=0).reset_index() 
print (df) 
    row_number value 
0   1  21 
1   2  0 
2   3 10234 
3   4  0 
4   5 467 
5   6 395 
6   7 762 
7   8  0 
8   9  0 

如果顺序很重要:

a = df['row_number'].values.tolist() + np.setdiff1d(np.arange(1,10), df['row_number'].values).tolist() 
print (a) 
[1, 3, 5, 6, 7, 2, 4, 8, 9] 

df = df.set_index('row_number').reindex(a, fill_value=0).reset_index() 
print (df) 
    row_number value 
0   1  21 
1   3 10234 
2   5 467 
3   6 395 
4   7 762 
5   2  0 
6   4  0 
7   8  0 
8   9  0