2016-11-10 107 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