python - 连接具有相同索引的行,删除重复项
问题描述
*这不是第一次在这里被问到,但我还没有看到任何与多列相关的 Q
示例数据:
1 2 3 ........
Orange |a |d |e
Orange |b |b |e
Black |y |z |nan
Black |x |y |nan
Black |z |nan |nan
Black |w |x |y
Blue |g |h |i
Blue |i |nan |nan
..
我正在尝试加入相同的索引行,并删除重复项,即橙色:abde
通过以下方式连接相同的索引行:
df = df.groupby(df.index).agg(lambda z: ','.join(z.astype(str)))
之后,我将所有行都用逗号连接在某些列中。我试图将它们移动到单独的列:
df = df.columns.str.split(',',expand=True)
但它没有用。
将它们移动到单独的列后,我将使用 drop_duplicates()。
在展开部分需要帮助。
已编辑(无需订购):
1 2 3 4 5 6 7....
Orange |a |b |d |e
Black |y |z |x |w
Blue |g |h |i
解决方案
您可以通过获取unique
每组索引的值来做到这一点,一旦您stack
在一个列中获取所有值,然后Series
为每组创建一个具有唯一元素的值。最后unstack
得到预期的输出。
res = (
df.stack()
.groupby(level=0)
.apply(lambda x: pd.Series(x.unique()))
.unstack()
)
print(res)
0 1 2 3
Black y z x w
Blue g h i NaN
Orange a d e b
请注意,如果nan
是字符串并且您不想要它们,则可以.replace('nan', np.nan)
在 groupby 之前添加,它们将在unique
.
推荐阅读
- pine-script - pinescript中是否有process_orders_on_open之类的东西?
- amazon-s3 - AWS Cloud S3 并使用 Tableau 检索文件
- typescript - 根据主ID和子ID合并数组内的对象
- php - PHP - 防止在具有父对象的对象中循环引用
- javascript - 通过 DOM 设置 src 与比较 src 值
- html - CSS悬停被强制 - 应用于孩子
- android - 为什么 Zoom Meeting 应用程序显示在用于共享 GEO 位置意图的可用应用程序列表中?
- r - 如何将0到1之间的值向量映射到R中的彩色条?
- string - Fortran 90 打印出一个空字符串
- oracle - Hackerrank 问题 PLSQL 员工未分配到任何部门