我想阅读一个Excel文件,并希望我的代码根据该excel文件中某列的值复制行。
e.g。
Col 1 Col 2
0 Adam 3
1 Sarah 2
2 John 0
我希望我的代码在上面的文件中读取并将Adam的行复制3次,将Sarah的行复制2次并导出到新文件中。
答案 0 :(得分:5)
如果隐瞒RangeIndex
:
repeat
与loc
一起使用
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'])