【问题标题】:Pandas data frame combine rows熊猫数据框组合行
【发布时间】:2017-02-22 18:31:47
【问题描述】:

我的问题是我想清除的大型数据框。我的两个主要问题是:

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

  2. 数据的顺序并不总是相同。

这是一个澄清的例子

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 左半部分可能有不同的数据。

【问题讨论】:

  • 右半边,y1, y2 是不是一直跟在x1, x2 后面?
  • 可以是 y1、y2 跟在 x1、x2 之后,或者反过来。但是,如果在一个文件中设置了顺序,它将始终保持相同的顺序。
  • 我提出的答案有效吗?
  • 我还没有机会用原始数据进行测试。如果测试完成,我会回复。
  • 谢谢伊恩。它工作正常。只是花了我一段时间,因为我必须处理正在进行的其他问题。

标签: python python-3.x pandas dataframe spyder


【解决方案1】:

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

首先,隔离右半边:

r = df[['x1', 'x2', 'y1', 'y2']].dropna(how='all')

第二,使用dropna逐列压缩数据:

r_compressed = r.apply(
    lambda g: g.dropna().reset_index(drop=True),
    axis=0
).set_index(r.index[::2])

您需要删除索引,否则 pandas 将尝试重新对齐数据。原始索引在末尾重新应用(但仅使用第二个索引标签)以方便重新插入左半部分和 t 列。

输出(注意索引值):

    x1   x2   y1   y2
0  1.0  2.0  2.0  4.0
3  1.0  2.0  2.0  3.0
5  1.0  2.0  2.0  3.0

第三,隔离左半边:

l = df[['a', 'b', 'c', 'd']].dropna(how='all')

第四,将左半部分和t列合并到压缩右半部分:

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

【讨论】:

    猜你喜欢
    • 2016-10-03
    • 2017-06-03
    • 2020-06-25
    • 1970-01-01
    • 2018-05-11
    • 2016-07-14
    • 1970-01-01
    • 2022-01-21
    • 2013-09-26
    相关资源
    最近更新 更多