根据列中的值重复行

时间:2018-06-11 11:05:52

标签: python excel pandas numpy

我想阅读一个Excel文件,并希望我的代码根据该excel文件中某列的值复制行。

e.g。

    Col 1  Col 2
0   Adam      3
1  Sarah      2
2   John      0

我希望我的代码在上面的文件中读取并将Adam的行复制3次,将Sarah的行复制2次并导出到新文件中。

2 个答案:

答案 0 :(得分:5)

如果隐瞒RangeIndex

,请repeatloc一起使用
print (df.index.repeat(df['Col 2']))
Int64Index([0, 0, 0, 1, 1], dtype='int64')

df = df.loc[df.index.repeat(df['Col 2'])].reset_index(drop=True)
print (df)
   Col 1  Col 2
0   Adam      3
1   Adam      3
2   Adam      3
3  Sarah      2
4  Sarah      2

然后:

df.to_csv(file, index=False)

重复索引或DatetimeIndex的常规解决方案是numpy.arange创建的重复numpy数组,并按iloc按位置选择:

df = df.iloc[np.arange(len(df)).repeat(df['Col 2'])].reset_index(drop=True)

编辑:

没有np.repeat的解决方案:

df =df.loc[[c for a, b in zip(df.index, df['Col 2']) for c in [a] * b]].reset_index(drop=True)
print (df)
   Col 1  Col 2
0   Adam      3
1   Adam      3
2   Adam      3
3  Sarah      2
4  Sarah      2

答案 1 :(得分:0)

另一种解决方法,

pd.merge(pd.DataFrame(df['Col 1'].repeat(df['Col 2'])),df,on=['Col 1'])