python - Pandas 数据框合并行

标签 python python-3.x pandas dataframe spyder

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

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

最佳答案

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

首先,分离右半部分:

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

关于python - Pandas 数据框合并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40024294/

相关文章:

python - 每n步执行一次while循环

python - 通过用 0 替换元素生成所有可能的列表

python - 将 Json 加载到 Pandas 数据框中

python黑白图像检测

python - 如何使bash和make install使用虚拟环境

python - 将 Pandas 列转换为字典,其中列标题为键,列值作为值

python - 使用新键将 Pandas DataFrame 转换为 Dict 格式

python - 使用 python 将十六进制转储到 YAML

python - 使用 tkinter 不可关闭的窗口

python - 如何使用 python 将波斯语文本保存在 csv 文件中?