使用pandas

时间:2016-11-10 18:00:41

标签: python pandas

我有以下dataFrame:

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

我将通过重复行中的每个项目来生成数据框,除了列z4中的项目(不应重复)。我怎么能用python和pandas做到这一点。

输出应该是这样的:

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   

2 个答案:

答案 0 :(得分: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 :(得分: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