数据排序和删除重复项

时间:2018-09-04 18:17:06

标签: python pandas dataframe

我有数据框

df1

   ec  em  p_x  p_y
0 22  aa   44    45
1 22  aa   45    44
2 22  aa   47    nan
3 67  bb   56    92
4 67  bb   92    56
5 67  bb   92    40
6 67  bb   92    56
7 82  tt   23    12
8 82  tt   23    23
9 82  tt   12    23

我正在寻找输出为

   ec  em  p_x  p_y
0 22  aa   47    nan
1 67  bb   92   40
2 67  bb   92   56

我想针对特定的ec和em列删除基于列p_x和p_y的重复值。请让我知道我该如何实现。

或者即使我可以像这样重新订购df1

   ec  em  p_x  p_y
0 22  aa   44    44
1 22  aa   45    45
2 22  aa   47    nan
3 67  bb   56    56
4 67  bb   92    92
5 67  bb   92    40
6 67  bb   92    56
7 82  tt   23    23
8 82  tt   23    23
9 82  tt   12    12

我可以使用df1 [〜df1 ['p_x'] == df1 ['p_y']] 并达到愿望的结果

1 个答案:

答案 0 :(得分:0)

下面是您遇到的问题的熊猫代码:

import numpy as np

conditions = [
    (df['p_x'].isna() == False) & (df['p_y'].isna() == False),
    (df['p_x'].isna() == False) & (df['p_y'].isna() == True),
    (df['p_x'].isna() == True) & (df['p_y'].isna() == False)
]
choices = [df['p_x'] * df['p_y'], df['p_x'], df['p_y']]
df['flag'] = np.select(conditions, choices, default='black')
df = df.drop_duplicates(subset=["flag"], keep = False).drop(columns = ["flag"])

让我知道这是否对您有帮助