我会尽量用我的例子说明清楚.

df_old

user, col1,col2,col3
a   ,  X  ,    ,
a   ,     ,  Y ,
a   ,     ,    , 6
b   ,  A  ,    ,
b   ,     ,  B , C
b   ,     ,  D ,

这是user人订购的.我想填补空白并删除重复项,所以对于用户a,我将在最后一个帧中只得到一行. 我在处理用户b这样的情况.由于用户b的col2中有两个不同的值,所以我希望最终的rabrame有两个不同的行:

df_new

user, col1,col2,col3
a   ,  X  ,  Y , 6
b   ,  A  ,  B , C
b   ,  A  ,  D , C

注意,我希望行是"一致的",这样B和C就保持在同一个索引上.

谢谢你的帮助!

推荐答案

使用GroupBy.transform与集合NaNs重复Series.maskSeries.duplicated,按具有向前缺失值的非NaN值排序,最后删除每组重复users:

out = (df.set_index('user')
         .groupby('user')
         .transform(lambda x: x.mask(x.duplicated()).sort_values(key=pd.isna).ffill())
         .reset_index()
         .drop_duplicates(ignore_index=True)
         )
print (out)
  user col1 col2 col3
0    a    X    Y    6
1    b    A    B    C
2    b    A    D    C

编辑:如果每行需要缺失值(如果存在至少一个非缺失值)省略ffill并使用axis='all'参数添加DataFrame.dropna

out = (df.set_index('user')
         .groupby('user')
         .transform(lambda x: x.mask(x.duplicated()).sort_values(key=pd.isna))
         .dropna(how='all')
         .reset_index()
         )
print (out)
  user col1 col2 col3
0    a    X    Y    6
1    b    A    B    C
2    b  NaN    D  NaN

Python相关问答推荐

三个给定的坐标可以是矩形的点吗

仿制药的类型铸造

难以在Manim中正确定位对象

Pandas 有条件轮班操作

如果值发生变化,则列上的极性累积和

如何将多进程池声明为变量并将其导入到另一个Python文件

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

如何让这个星型模式在Python中只使用一个for循环?

将JSON对象转换为Dataframe

改进大型数据集的框架性能

如何使用Numpy. stracards重新编写滚动和?

旋转多边形而不改变内部空间关系

在matplotlib中使用不同大小的标记顶部添加批注

基于多个数组的多个条件将值添加到numpy数组

按条件添加小计列

多个矩阵的张量积

按条件计算将记录拆分成两条记录

在Pandas 中以十六进制显示/打印列?

将参数从另一个python脚本中传递给main(argv

在不降低分辨率的情况下绘制一组数据点的最外轮廓