python - 如何从熊猫数据框中删除累积对,只保留其中一个
问题描述
我正在将一些代码从 R 翻译成 python。我想删除具有相同 id 的对,只将其中一个保留在数据框中。
此外,我不能按“id”删除重复项,因为我可能有多个组合用于相同的“id”,这可能不是累积对示例:
id value.x value.y
1: 100057 38953993985 38993095846
2: 100057 38993095845 38953993985
3: 100057 38993095845 38993095846
4. 100057 38993095846 38953993985
这是R代码:
res <- df[df[, .I[1], by = list(pmin(value.x, value.y), pmax(value.x, value.y))]$V1]
输入 df 如下所示:
> head(df)
id value.x value.y
1: 100011 38989281716 38996868028
2: 100011 38996868028 38989281716
3: 100019 38916115350 38994231881
4: 100019 38994231881 38916115350
5: 100031 38911588267 38993358322
6: 100031 38993358322 38911588267
输出应该是
> head(res)
id value.x value.y
1: 100011 38989281716 38996868028
2: 100019 38916115350 38994231881
3: 100031 38911588267 38993358322
解决方案
你为什么不试试这个:
df['value'] = df.apply(lambda x: x['value.x'].astype(str) +x['value.y'].astype(str) if x['value.x']>x['value.y'] else x['value.y'].astype(str) +x['value.x'].astype(str) , axis = 1)
df.drop_duplicates(subset='value', keep='first', inplace=True)
id value.x value.y
0 100011 38989281716 38996868028
1 100011 38996868028 38989281716
2 100019 38916115350 38994231881
3 100019 38994231881 38916115350
4 100031 38911588267 38993358322
5 100031 38993358322 38911588267
id value.x value.y value
0 100011 38989281716 38996868028 3899686802838989281716
2 100019 38916115350 38994231881 3899423188138916115350
4 100031 38911588267 38993358322 3899335832238911588267
推荐阅读
- python - 在 AWS Glue Python Shell 作业中使用 boto3 读取 S3 文件的 Python 列表理解
- html - 块在打印页面的底部 html css
- sql - ON 子句和 INCLUDE 子句中指定列的索引声明差异
- react-native - 如何将 Expo 项目转换为 React Native Cli 模式?
- java - 结合规范和防止 NullPointerException 和 IllegalArgumentException
- batch-file - 批处理脚本有没有办法遍历目录日志并在每个目录中查找具有特定名称的文件夹
- google-cloud-platform - Google Cloud Platform 中的分布式配置?
- java - Maven 属性传播
- objective-c - 非法矢量组件名称“x”(金属)
- django - 值错误 Django CSV