如何将列表形式的输出拆分为单独的行?

最后一列派生自定义函数GROUPBY A、B、C.应用GROUPBY函数后,最后一列没有列标题

A          B  C       
202311     X  Y       [147.01, 140.01, 133.01, 126.01, 119.01, 112.0...
202312     X  Y       [175, 168, 161, 154, 147, 140, 133, 126, 119, ...
202313     X  Y       [175, 168, 161, 154, 147, 140, 133, 126, 119, ...
202314     X  Y       [175, 168, 161, 154, 147, 140, 133, 126, 119, ...
202315     X  Y       [175, 168, 161, 154, 147, 140, 133, 126, 119, ...
202316     X  Y       [95.09, 88.09, 81.09, 74.09, 67.09, 60.09, 53....
202317     X  Y       [60.1, 53.1, 46.1, 39.1, 32.1, 25.1, 18.1, 11....
202318     X  Y       [57.02, 50.02, 43.02, 36.02, 29.02, 22.02, 15....
202319     X  Y       [43.31, 36.31, 29.31, 22.31, 15.31, 8.31, 1.31...
202320     X  Y       [66.84, 59.84, 52.84, 45.84, 38.84, 31.84, 24....
202321     X  Y       [175, 168, 161, 154, 147, 140, 133, 126, 119, ...
202322     X  Y       [155.18, 148.18, 141.18, 134.18, 127.18, 120.1...
202323     X  Y       [170.63, 163.63, 150.18, 143.18, 136.18, 129.1...

预期结果:

A          B  C       D     E
202311     X  Y       202311    147.01
202311     X  Y       202312    140.01
202311     X  Y       202313    133.01  
202311     X  Y       202314    126.01
202311     X  Y       202315    119.01
202311     X  Y       202316    112.0
202311     X  Y       202317    ..
202311     X  Y       202318    ..
202312     X  Y       202312    175
202312     X  Y       202313    168
202312     X  Y       202314    161
202312     X  Y       202315    154
202312     X  Y       202316    147

列D是现有列.

谢谢!

已try df['E'] = df.groupby(['A', 'B', 'C']).apply(lambda d: customfunction(d['X'], d['Y']).str.split(',')

错误消息: incompatible index of inserted column with frame index

推荐答案

Example Code

你的例子不是最小的,也不是可重复的.Plz provide a minimal and reproducible example.在输入中包括遗漏,如(...),也是一个典型的坏例子.创造一个完整的例子.

让我们创建一个新的例子来解释.

import pandas as pd
data = {'A':[202311, 202312, 202313], 'B':'X', 'C':'Y', 
        'col':[[147, 140, 133], [175, 168, 161], [120, 140, 160]]}
df = pd.DataFrame(data)

Df:

enter image description here



Code

分解后使用explode和Make Column by groupby + cumcount

out = df.explode('col')\
        .assign(D=lambda x: x.groupby('A').cumcount().add(x['A']))\
        .reindex(['A', 'B', 'C', 'D', 'col'], axis=1).rename(columns={'col':'E'})

输出:

    A       B   C   D       E
0   202311  X   Y   202311  147
0   202311  X   Y   202312  140
0   202311  X   Y   202313  133  
1   202312  X   Y   202312  175   <-- start with 202312
1   202312  X   Y   202313  168
1   202312  X   Y   202314  161
2   202313  X   Y   202313  120   <-- start with 202313
2   202313  X   Y   202314  140
2   202313  X   Y   202315  160

Python相关问答推荐

如何将 map 数组组合到pyspark中每列的单个 map 中

Django注释:将时差转换为小数或小数

从管道将Python应用程序部署到Azure Web应用程序,不包括需求包

覆盖Django rest响应,仅返回PK

Pandas :多索引组

具有症状的分段函数:如何仅针对某些输入值定义函数?

Odoo -无法比较使用@api.depends设置计算字段的日期

当多个值具有相同模式时返回空

韦尔福德方差与Numpy方差不同

如何删除索引过go 的lexsort深度可能会影响性能?' &>

pyscript中的压痕问题

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

如果满足某些条件,则用另一个数据帧列中的值填充空数据帧或数组

将pandas导出到CSV数据,但在此之前,将日期按最小到最大排序

如何使用SentenceTransformers创建矢量嵌入?

使用Python和文件进行模糊输出

在matplotlib中删除子图之间的间隙_mosaic

导入错误:无法导入名称';操作';

提高算法效率的策略?

统计numpy. ndarray中的项目列表出现次数的最快方法