【问题标题】:How can I insert a row into a dataframe, while preserving numerical order of row indexes?如何在数据框中插入一行,同时保留行索引的数字顺序?
【发布时间】:2014-02-27 06:35:22
【问题描述】:

我正在使用来自每 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 之间?

谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案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]
    

    【讨论】:

    • 用一个最小的工作代码示例简明扼要的回答——如果可以的话,我会投票两次!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-06-12
    • 2020-01-16
    • 1970-01-01
    • 2019-05-27
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多