python - 检查行列之间的重复项
问题描述
我正在尝试遍历数据框以检查特定行的列中是否有任何重复项,然后结果应返回整行。我感兴趣的列从 Prod_code_1 上升到 Prod_code_47。我的部分问题是如何在比较该行的一列中的值是否与该行的相邻列匹配时格式化列名。
如果特定行的列中有任何重复项,则结果应返回整行/True。
我之后的列看起来像这样(数据框还有一堆其他列,而不仅仅是下面显示的列):
Prod_code_1 | Prod_desc_1 | Prod_code_2 | Prod_desc_2 |
DIS | DIS | DIS | DIS | (returns true)
DIS | DIS | DIS | UVA | (returns false)
我的代码:
for index, row in df.iterrows():
for i in range(1,len(df)):
if df['Prod_code_'+str(i)][row] == df['Prod_code_'+str(i+1)][row]:
print(row)
我得到的错误是:
系列的真相是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any()、a.all()
我知道这应该是一个相对简单的操作,但我很困惑,想知道是否有人知道我的查询的简单解决方案。非常感谢任何帮助。谢谢 :)。
解决方案
我假设您的要求如下:
- 您想从大数据框中过滤掉一些感兴趣的列
- 然后你想检查所有列是否相等,那么应该返回一个True布尔值
如果我的理解是正确的,那么请按照以下解决方案。
步骤1:
要获取您的子集数据框,您的列名似乎遵循一种模式,我们可以在循环中使用它并从中创建一个新的数据框(可能有更好的方法,但我相信这应该可以正常工作)
df_subset = pd.DataFrame() # Creating a new dataframe for cols in list(df.columns): # Assuming df is the original dataframe if 'Prod_' in cols: df_subset[cols] = df[cols]
这应该会返回您感兴趣的列的子集。
第2步:
我有类似的工作要求,但我的数据框中有一些
np.nan
值在执行检查时必须被忽略但不会被删除。如果您遇到这种情况,请参阅下面的代码,否则请跳到下一步:for cols in list(df_subset.columns): df_subset.loc[df_subset[cols].isnull(),cols] = df_subset['Prod_code_1']
在这里,我只是用第一列的
null
值替换任何行的任何列中的值(假设第一列将始终保存一个值)。
第 3 步:
检查一行的所有列值是否相等
df_is_equal = df_subset.eq(df_subset.iloc[:,0],axis=0).all(1)
在这里,我只是用第一列的值检查数据框列的值。请关注 pandas eq文档以了解更多信息。
这些步骤应该做你在那里尝试的。
推荐阅读
- reactjs - 如何在 React 中的参考输入中设置默认值 - 管理员
- python - 用于汽车价格预测的无监督机器学习分类器
- c# - 如何在 .NET DI 中注入具有类型约束的类?
- angularjs - 如何在离开之前检查旧的 $scope?
- java - 无法解析 showAddDialog 中的符号
- visual-studio - 将 Visual Studio Online 项目下载到不同 PC 时处理丢失 DLL 的正确方法
- python - 如何在 sqlite3 中存储列表(使用数据创建图表)?
- javascript - 当元素未定义时,Javascript if 语句不输出我想要的值
- video - 在整页js滚动上向前和向后播放视频
- node.js - GraphQL 关系