将行相乘并按单元格值追加到数据框

时间:2018-05-04 07:51:18

标签: python pandas numpy

考虑以下数据框;

document

enter image description here

我想在'#'列中追加数字大于1的行,该行中的数字减去1. df应该最好 然后看起来像这样;

enter image description here

或者它看起来像这样(行完全乘以);

enter image description here

是的,我已经广泛搜索过这个问题,但找不到能帮助我朝正确方向发展的任何事情。

1 个答案:

答案 0 :(得分:1)

使用numpy.repeat

c = df.columns[1:]
df = pd.DataFrame(np.repeat(df.values, df['#'], axis=0)[:, 1:], columns=c)
print (df)
   X  Y  Z
0  a  a  a
1  b  b  b
2  b  b  b
3  c  d  c
4  d  e  d
5  d  e  d
6  d  e  d

类似:

df = pd.DataFrame(np.repeat(df.values, df['#'], axis=0), columns=df.columns)
print (df)
   #  X  Y  Z
0  1  a  a  a
1  2  b  b  b
2  2  b  b  b
3  1  c  d  c
4  3  d  e  d
5  3  d  e  d
6  3  d  e  d

但如果订单很重要:

dfs = []
for i in range(df['#'].max()):
    df = df[df['#'] > 0].copy()
    df['#'] -= 1
    dfs.append(df.iloc[:, 1:])

df1 = pd.concat(dfs, ignore_index=True) 
print (df1)
   X  Y  Z
0  a  a  a
1  b  b  b
2  c  d  c
3  d  e  d
4  b  b  b
5  d  e  d
6  d  e  d