[英]Is it possible to conditionally combine data frame rows using pandas in python3?
[英]Pandas data frame combine rows
我的問題是一個大數據框,我想清除它。 對我來說,兩個主要問題是:
整個數據幀是基於時間的。 這意味着我不能移動行,否則時間戳將不再適合。
數據並不總是以相同的順序排列。
這是一個澄清的例子
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.