如何在保留行索引的数字顺序的同时在数据框中插入行?

时间:2014-02-03 16:55:47

标签: python pandas

我正在使用每2毫秒采样一次的机器中的数据帧,因此我的所有行索引都已重新编入索引到机器的时间戳。某些TTL事件可以在任何时间间隔内以毫秒精度发生,因此TTL可能会在奇数个毫秒内发生。

为了模拟这个,我创建了以下DataFrame:

import pandas as pd
df = pd.DataFrame({'x': xrange(10), 'y': xrange(10)})
df = df.ix[2::2]  # now we only have "time sample" every 2 ms
df['events'] = ''  # add a TTL channel

DataFrame现在看起来像这样:

x    y       events
2    2    2        NaN
4    4    4        NaN
6    6    6        NaN
8    8    8        NaN

[4 rows x 3 columns]

现在我想插入一个奇数索引的ttl,所以我使用DataFrame.loc

df.loc[3, 'events'] = 'kowabunga!'

我获得以下内容:

     x    y       events
2    2    2        NaN
4    4    4        NaN
6    6    6        NaN
8    8    8        NaN
3  NaN  NaN  kowabunga!

[5 rows x 3 columns]

问题是我的索引的数字顺序(加上时间戳加倍)不会被保留。我怎样才能插入“kowabunga”行,使其位于索引2和4之间?

谢谢!

1 个答案:

答案 0 :(得分:1)

在添加到数据框之后添加df.sort(inplace=True)

演示:

import pandas as pd
df = pd.DataFrame({'x': xrange(10), 'y': xrange(10)})
df = df.ix[2::2]  # now we only have "time sample" every 2 ms
df['events'] = ''  # add a TTL channel
df.loc[3, 'events'] = 'kowabunga!'
df.loc[5, 'events'] = 'kowabunga2!'
df.loc[1, 'events'] = 'kowabunga3!'
df.sort(inplace=True)
print df

输出:

    x   y       events
1 NaN NaN  kowabunga3!
2   2   2             
3 NaN NaN   kowabunga!
4   4   4             
5 NaN NaN  kowabunga2!
6   6   6             
8   8   8             

[7 rows x 3 columns]