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后面的。但是如果在一个文件中设置了顺序,它将始终保持相同的顺序。我建议的答案有效吗?我还没有机会用原始数据测试它。如果测试完成,我会回复。谢谢伊恩。它很好用。只是花了我一段时间,因为我必须处理进程中的其他问题。