【问题标题】:Pandas how do I compare columns for equality in a dataframe that have the same name except for a suffix?熊猫如何比较数据框中具有相同名称但后缀除外的列是否相等?
【发布时间】:2023-01-14 01:56:50
【问题描述】:
我有一个数据框,其中有很多列,格式如下:
| id |
col1_df1 |
col2_df1 |
col3_df1 |
col1_df2 |
col2_df2 |
col3_df2 |
| A1 |
num |
num |
num |
num |
num |
num |
| A2 |
num |
num |
num |
num |
num |
num |
| A3 |
num |
num |
num |
num |
num |
num |
| A4 |
num |
num |
num |
num |
num |
num |
| A5 |
num |
num |
num |
num |
num |
num |
我需要比较前缀前具有相同名称的列。也就是说,我需要比较col1_df1和col1_df2,col2_df1和col2_df2,等等。我需要检查每个“重复”列(每个 col1、每个 col2 等)中的相等百分比。我无法手动完成,因为有很多列。
有没有办法使用 Pandas 功能来做到这一点?
谢谢!
【问题讨论】:
标签:
python
pandas
dataframe
compare
【解决方案1】:
(df.groupby(lambda col: col.partition("_")[0], axis="columns")
.diff().dropna(how="all", axis="columns")
.eq(0).sum()
.div(len(df)).mul(100)
.rename(lambda idx: idx.split("_")[0]))
- 将数据框分组在“_”之前的列名称上,即 col_{i} 的
- 取每组的差值
- 因为每组的第一列没有任何剩余,它们将是 NaN,所以放弃它们
- 检查差异等于 0 的地方,即重复:求和给出计数
- 然后将其百分比化
- 最后获取最终结果的组名(col_{i}'s)
得到类似的东西(对于一些随机数据)
col1 40.0
col2 0.0
col3 33.3
dtype: float64