pandas - 如果空白,熊猫会合并行
问题描述
只要合并不覆盖值,我就希望根据 id 组合行。
所以对于 df :
Column1 Column2 Column3 Column4
aa_1 123 456
aa_2 123
aa_4 123
aa_6
aa_1 789 789
aa_2 4567
aa_4 234 456 678 987
aa_6 123 456 567 765
我正在寻找最终结果是:
,Column1,Column2,Column3,Column4
aa_1,123,789,456,789
aa_2,4567,123,,
aa_4,234,456,678,987
aa_4,,,123,
aa_6,123,456,567,765
重新创建数据框的代码:
data = [['123', '', '456', ''], ['', '123', '', ''], ['', '', '123', ''], ['', '', '', ''], ['', '789', '', '789'], ['4567', '', '', ''], ['234', '456', '678', '987'], ['123', '456', '567', '765']]
index = ['aa_1', 'aa_2', 'aa_4', 'aa_6', 'aa_1', 'aa_2', 'aa_4', 'aa_6']
columns = ['Column1', 'Column2', 'Column3', 'Column4']
df = pd.DataFrame(data, index, columns)
解决方案
它可能不是所有可能的解决方案中最优雅的,但这可以完成工作:
它首先预留已经填充的行的想法。在您的情况下,它是示例的最后两行。这样做的原因是它们总是会干扰以相同方式索引的任何其他行(aa_4 和 aa_6)。下一步是合并包含空单元格的行。但是,如果处理起来更容易
- 索引是唯一的(解决方案中的重新索引)
- 我空单元格是
nan
(其中的替换语句)
所以:
import pandas as pd
import numpy as np
data = [['123', '', '456', ''], ['', '123', '', ''], ['', '', '123', ''], ['', '', '', ''], ['', '789', '', '789'], ['4567', '', '', ''], ['234', '456', '678', '987'], ['123', '456', '567', '765']]
index = ['aa_1', 'aa_2', 'aa_4', 'aa_6', 'aa_1', 'aa_2', 'aa_4', 'aa_6']
columns = ['Column1', 'Column2', 'Column3', 'Column4']
df = pd.DataFrame(data, index, columns)
df = df.reset_index()
df2 = df.replace(r'^\s*$', np.nan, regex=True)
df3 = df2.dropna()
df4 = df[~df.index.isin(df3.index)]
df5 = df4.groupby(['index']).sum().reset_index()
df_full = pd.concat([df5,df3]).set_index(['index']) #resets your original index
返回
Column1 Column2 Column3 Column4
index
aa_1 123 789 456 789
aa_2 4567 123
aa_4 123
aa_6
aa_4 234 456 678 987
aa_6 123 456 567 765
您只需要删除空行,就像我在解决方案中所做的那样,例如,
df_full = df_full.replace(r'^\s*$', np.nan, regex=True)
df_full = df_full.dropna(how='all')
推荐阅读
- html - 如何从 Controller 返回文件以查看?
- excel - 文件目录不返回任何对象
- flutter - 颤振:CircularProgressIndicator 保持在列的中心
- web - 如何使用位于文件系统本地的特定文件打开(从 Web)visio 应用程序
- c++ - Allgro 5中的定义错误'...的多重定义首先在这里定义...'
- python - 子图的 Matplotlib 对齐/设置垂直空间(Jupyter Notebook)
- haskell - Haskell从整数到字符串(自己的函数)
- laravel - 如何在 Laravel 中使用 Carbon 获取一年中的所有月份
- javascript - 返回某个字节长度的子字符串
- python - Flask - 如何在路由匹配之前从 URL 中删除格式扩展,如 .json