2016-11-10 123 views
1

我有以下數據幀:重複項使用熊貓

id z2 z3 z4 
1 2 a fine 
2 7 b good 
3 9 c delay 
4 30 d cold 

我要通過連續重複的每個項目兩次除在柱Z4項生成的數據幀(即不應該重複)。我如何使用Python和熊貓來做到這一點。

輸出應該是這樣的:

id z1 z3 z4 
1 2 a fine 
1 2 a 
1 2 a 
2 7 b good 
2 7 b 
2 7 b 
3 9 c delay 
3 9 c 
3 9 c 
4 30 d cold 
4 30 d 
4 30 d 
+0

的ID應該是唯一的。 – Back2Basics

回答

2

另一種方式做,這是使用索引: 注意df.iloc[[0, 1, 2, 3]*2, :3]會給你前三列的兩份。

然後這可以附加到原始df。刪除NA。然後對索引值進行排序並重置索引(刪除舊索引)。所有這一切都可以被鏈接:

df.append(df.iloc[[0, 1, 2, 3]*2, :3]).fillna('').sort_index().reset_index(drop=True) 

主要生產:

id z2 z3  z4 
0 1 2 a fine 
1 1 2 a  
2 1 2 a  
3 2 7 b good 
4 2 7 b  
5 2 7 b  
6 3 9 c delay 
7 3 9 c  
8 3 9 c  
9 4 30 d cold 
10 4 30 d  
11 4 30 d 
1

groupbyapply將這樣的伎倆:

def func(group): 
    copy = group.copy() 
    copy['z4'] = "" 
    return pd.concat((group, copy, copy)) 

df.groupby('id').apply(func).reset_index(drop=True) 


    id z2 z3  z4 
0 1 2 a fine 
1 1 2 a  
2 1 2 a  
3 2 7 b good 
4 2 7 b  
5 2 7 b  
6 3 9 c delay 
7 3 9 c  
8 3 9 c  
9 4 30 d cold 
10 4 30 d  
11 4 30 d