为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 pandas 数据框中找到 row_x 的 col1 值 == row_y 的 col2

如何在 pandas 数据框中找到 row_x 的 col1 值 == row_y 的 col2

慕田峪9158850 2022-06-14 16:25:37
我有一个包含多列的熊猫数据框。这些列中的 2 列应该相等但在单独的行中,第三列应该在两行中相等。例如,给定数据帧 df[A, B, C],找到 row_x 和 row_y 使得:(df.iloc[x, A] == df.iloc[y, B]) and (df.iloc[x, B] == df.iloc[y, A]) and (df.iloc[x, C] == df.iloc[y, C])有没有比遍历框架更好的方法来获取交换列的行?A = [30,31]+list(range(2,8,1))+[38,39]B = range(10,0,-1)C = [True, False, True, False, False, False, True, False, True, False]df = pd.DataFrame({'A': A, 'B': B, 'C': C})Out[]: df    A   B   C0   30  10  True1   31  9   False2   2   8   True3   3   7   False4   4   6   False5   5   5   False6   6   4   True7   7   3   False8   38  2   True9   39  1   FalseRequired output:    A   B   C3   3   7   False5   5   5   False7   7   3   False只有第 3、5 和 7 行满足上述条件。我将进一步删除第 5 行,因为我对 A 列 = B 列的行不感兴趣。请注意,第 4 行和第 6 行也交换了 A 列和 B 列中的值,但 C 列中的值不同。
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

使用GroupBy 根据列进行分组。使用 GroupBy.apply 和 Series.isinC检查两个系列(和) 的公共值,然后可以使用DataFrame.unstack和DataFrame.any进行布尔索引:AB


new_df=df[df.groupby('C').apply(lambda x: x['A'].isin(x['B'])&x['B'].isin(x['A'])).unstack().any()]

print(new_df)



   A  B      C

3  3  7  False

5  5  5  False

7  7  3  False

回应您的评论:


df['A'].isin(df['B'])


0    False

1    False

2     True

3     True

4     True

5     True

6     True

7     True

8    False

9    False

Name: A, dtype: bool

df['A']==df['B']        


0    False

1    False

2    False

3    False

4    False

5     True

6    False

7    False

8    False

9    False

dtype: bool


查看完整回答
反对 回复 2022-06-14
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

关键是将数据框合并到自身,将B列与A列匹配:


df = df.merge(df.rename({'B': 'A', 'A': 'AfromB', 'C': 'CfromB'}, axis=1), how='left')

df = df[(df['B'] == df['AfromB']) & (df['C'] == df['CfromB'])].drop(['AfromB', 'CfromB'], axis=1)



查看完整回答
反对 回复 2022-06-14
  • 2 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信