pandas - 根据 id 列检查数据框中某些值的相似性
问题描述
我有一个这样的df:
ix y1 y2 id
ix1 X X AP10579
ix2 E E AP17998
ix3 C C AP283716
ix4 C C AP283716
ix5 E E AP17998
ix6 T T AP21187
ix7 X Z AP10579
ix8 T K AP21187
ix9 E E AP12457
ix10 C C Ap87930
在 id 列中,我们有两个相似的 id(fx ix1 和 ix7 具有相同的 id,ix2 和 ix5,依此类推)。我们还有一些唯一的 id,
我想检查这两个 id 中的每一个的 y1+y2 是否相同,如果它们相同,那么将其中一个移动到新的 df 中,同时移动每个唯一的 id,
所以我应该有一个新的df,df_new,像这样:
ix y1 y2 id
ix2 E E AP17998
ix3 C C AP283716
ix9 E E AP12457
ix10 C C Ap87930
任何建议表示赞赏。
df = {
'ix': ['ix1','ix2','ix3','ix4','ix5','ix6','ix7','ix8','ix9','ix10'],
'y1': ['X','E','C','C','E','T','X','T', 'E','C'],
'y2': ['X','E','C','C','E','T','Z','K', 'E','C'],
'id': ['AP10579','AP17998','AP283716','AP283716','AP17998','AP21187','AP10579','AP21187', 'AP12457', 'Ap87930']
}
解决方案
这是一种可能的方法:
df = pd.DataFrame({
'ix': ['ix1','ix2','ix3','ix4','ix5','ix6','ix7','ix8','ix9','ix10'],
'y1': ['X','E','C','C','E','T','X','T', 'E','C'],
'y2': ['X','E','C','C','E','T','Z','K', 'E','C'],
'id': ['AP10579','AP17998','AP283716','AP283716','AP17998','AP21187','AP10579','AP21187', 'AP12457', 'Ap87930']
})
def filter_df(g):
if len(g) == 1:
return g.iloc[0]
if g.y1.unique().size + g.y2.unique().size == 2:
return g.iloc[0]
df.groupby('id').agg(filter_df).dropna().reset_index()
输出:
id ix y1 y2
0 AP12457 ix9 E E
1 AP17998 ix2 E E
2 AP283716 ix3 C C
3 Ap87930 ix10 C C
推荐阅读
- android - 如何从自定义视图中扩展 onItemSelectedListener?
- php - 如何根据mysql中的if else条件选择数据
- flutter - Flutter Web 调试正常,但构建 Web 显示空白页面
- csv - 如何从头开始读取 CSV?
- knex.js - MemSQL Distributed 不支持“重新调整单例选择”
- python - 我不知道为什么会发生 UnboundLocalError
- python - 无法创建表
- laravel - Laravel 一种用于存储和更新的验证功能
- docker - 特雷菲克路线 404
- c# - De-serialize JSON into a List using a runtime Class