Python 数据帧合并行

Python 数据帧合并行,python,python-3.x,pandas,dataframe,spyder,Python,Python 3.x,Pandas,Dataframe,Spyder,我的问题是一个大数据帧,我想清除它。我面临的两个主要问题是: 整个数据帧是基于时间的。这意味着我不能移动行,否则时间戳就不合适了 数据的顺序并不总是相同的 下面是一个要澄清的例子 index a b c d x1 x2 y1 y2 t 0 1 2 0.2 1 1 2 0.4 2 2 4 0.6 3

我的问题是一个大数据帧,我想清除它。我面临的两个主要问题是:

  • 整个数据帧是基于时间的。这意味着我不能移动行,否则时间戳就不合适了

  • 数据的顺序并不总是相同的

  • 下面是一个要澄清的例子

    index  a  b  c  d  x1  x2  y1  y2  t
    0                  1   2           0.2
    1      1  2                        0.4
    2                          2   4   0.6
    3                  1   2           1.8
    4                          2   3   2.0
    5                  1   2           3.8
    6                          2   3   4.0
    7            2  5                  4.2
    
    结果应该是这样的

    index  a  b  c  d  x1  x2  y1  y2  t
    0                  1   2   2   4   0.2
    1      1  2                        0.4
    3                  1   2   2   3   1.8
    5                  1   2   2   3   3.8
    7            2  5                  4.2
    

    总之,这意味着我想要df的右半部分,并保留第一个条目的时间戳。第二个问题是,df的左半部分之间可能有不同的数据

    这可能不是最通用的解决方案,但它解决了您的问题:

    首先隔离右半部分:

    r = df[['x1', 'x2', 'y1', 'y2']].dropna(how='all')
    
    out = r_compressed.combine_first(l)
    out['t'] = df['t']
    
    Second,使用
    dropna
    逐列应用压缩数据:

    r_compressed = r.apply(
        lambda g: g.dropna().reset_index(drop=True),
        axis=0
    ).set_index(r.index[::2])
    
    您需要删除索引,否则熊猫将尝试重新对齐数据。在末尾重新应用原始索引(但仅使用第二个索引标签),以便于重新插入左半部分和
    t

    输出(注意索引值):

    第三个,隔离左半部分:

    l = df[['a', 'b', 'c', 'd']].dropna(how='all')
    
    第四个,将左半部分和
    t
    列合并到压缩的右半部分:

    r = df[['x1', 'x2', 'y1', 'y2']].dropna(how='all')
    
    out = r_compressed.combine_first(l)
    out['t'] = df['t']
    
    输出:

         a    b    c    d   x1   x2   y1   y2    t
    0  NaN  NaN  NaN  NaN  1.0  2.0  2.0  4.0  0.2
    1  1.0  2.0  NaN  NaN  NaN  NaN  NaN  NaN  0.4
    3  NaN  NaN  NaN  NaN  1.0  2.0  2.0  3.0  1.8
    5  NaN  NaN  NaN  NaN  1.0  2.0  2.0  3.0  3.8
    7  NaN  NaN  2.0  5.0  NaN  NaN  NaN  NaN  4.2
    

    在右半部分,是不是总是跟在x1,x2后面?它可以是跟在x1,x2后面的y1,y2,也可以是跟在x1,x2后面的。但是如果在一个文件中设置了顺序,它将始终保持相同的顺序。我建议的答案有效吗?我还没有机会用原始数据测试它。如果测试完成,我会回复。谢谢伊恩。它很好用。只是花了我一段时间,因为我必须处理进程中的其他问题。