Python 根据另一列中的INT创建N行数

Python 根据另一列中的INT创建N行数,python,pandas,Python,Pandas,我有一个如下所示的数据框 unique_key #rows_needed avalue a 2 1000 b 1 1000 c 5 2500 d 18 10000 我试图根据所需行数创建一个类似这样的日期框,并根据所需行数列计算平均值(avalue) unique_key #rows_ne

我有一个如下所示的数据框

unique_key   #rows_needed  avalue
a                 2          1000
b                 1          1000
c                 5          2500
d                18          10000
我试图根据所需行数创建一个类似这样的日期框,并根据所需行数列计算平均值(avalue)

unique_key   #rows_needed   avg(avalue)
a                 2          500
a                 2          500
b                 1          1000
c                 5          500
c                 5          500
c                 5          500
c                 5          500
c                 5          500
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556
d                18          555.556

我看了熊猫的融化功能,但我不相信这会起作用。感谢您的帮助。

更新:

explode
方法是一种简单的方法:

import numpy as np
import pandas as pd
df = pd.DataFrame({'key': ['a', 'b'], 'rowsneeded': [3, 4], 'val': [100,600]})
df['eachval'] = df.val/df.rowsneeded
df['key'] = [[k] * r for k, r in zip(df.key, df.rowsneeded)] 
df = df.explode('key')
原始答案:

您可以使用重复的值创建另一个表,并将其合并到原始表:

import numpy as np
import pandas as pd
df = pd.DataFrame({'key': ['a', 'b'], 'rowsneeded': [3, 4], 'val': [100,600]})

repeated_vals = [[k] * r for k, r in zip(df.key, df.rowsneeded)] 
flat_list = [item for sublist in repeated_vals  for item in sublist]
df['eachval'] = df.val/df.rowsneeded
df = pd.DataFrame(flat_list, columns=['key']).merge(df, how='left', on='key')

废话我正在编辑这篇文章。df['avg']=df['avalue']/df['rowsneeded']怎么样?@Ajay我编辑了这篇文章。制作一个数字列表,比如:5->[5,5,5,5,5]?(任何lambda都可以使用)然后你可以取消这个命令,并最终应用除法?嗯,如果密钥是多个字符['aa','bb'],这就不起作用了。这是正确的方向,我很感激:)重复[u vals=[[s]*n代表s,n在zip中(df2.key.values,df2.rowsneeded.values)]这就是我用来克服遇到的障碍的方法。我正要说我修正了我的答案来做同样的事情;看上面。我实际上学会了一种更好的使用explode的技术,我会推荐它。请参阅上面我的编辑。