python - "Expand" Pandas 数据框按列中的值

标签 python python-3.x pandas

假设我从一个包含一些数据和一列数量的数据框开始:

In:  df=pd.DataFrame({'first-name':['Jan','Leilani'],'Qty':[2,4]})

Out: Qty    first-name
     2      Jan
     4      Leilani

我想创建一个数据框,将数据复制并标记到新行中,次数等于每行上的数量。输出应该如下所示:

Qty     first-name  position
2       Jan         1
2       Jan         2
4       Leilani     1
4       Leilani     2
4       Leilani     3
4       Leilani     4

我可以像这样使用 python 来做到这一点:

l=[]
x=0

for idx in df.index:
    x=0
    for _ in range(df.loc[idx]['Qty']):
        x+=1
        tempSrs=df.loc[idx]
        tempSrs['position']=x
        l.append(tempSrs)

outDf=pd.DataFrame(l)

这很慢。有没有办法使用 Pandas 函数来做到这一点?这实际上是一个“unpivot”,在 pandas 中是“melt”,但我无法弄清楚如何使用 melt 函数来完成此操作。

谢谢,

最佳答案

使用repeatcumcount

Newdf=df.reindex(df.index.repeat(df.Qty))
Newdf['position']=Newdf.groupby(level=0).cumcount()+1
Newdf
Out[931]: 
   Qty first-name position
0    2        jan        1
0    2        jan        2
1    4        jay        1
1    4        jay        2
1    4        jay        3
1    4        jay        4

关于python - "Expand" Pandas 数据框按列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50257516/

相关文章:

python - python开发环境运行入口点console_script

python - 在单元格条件下对 pandas 进行多个切片行

python - 从另一个字典 python 列表更新字典列表

python - 获取带有 tkinter.filedialog.asksaveasfilename 的文件名以附加到其中

python - 将 Pandas 数据框列导入为字符串而不是 int 或 float

python - scipy eigh 中的 SIGSEGV 错误

python - 在 Tkinter Python 中测量字符串的高度?

python - 如何从平面列表中制作嵌套列表?

python - 在 Pandas 中创建许多新列的最 Pythonic 方式

python - 如何删除概念重复项?