簡體   English   中英

Pandas 數據框合並行

[英]Pandas data frame combine rows

我的問題是一個大數據框,我想清除它。 對我來說,兩個主要問題是:

  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])

您需要刪除索引,否則熊貓會嘗試重新對齊數據。 原始索引在最后重新應用(但僅每隔一個索引標簽)以方便重新插入左半部分和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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM