我有以下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
答案 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)
groupby
和apply
可以解决问题:
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