0
votes

Comment filtrer des séries sur la base de la liste par rapport à d'autres lignes?

J'ai la série de pandas ci-dessous et j'ai besoin de sélectionner des lignes qui est Superset d'autres lignes.

Série: P>

1   [72197, 82086, 194665]
2   [72230]
3   [72235, 72690, 121261]
4   [72241]
5   [72251]
6   [72253, 83613, 101294]
7   [72255, 122794]
8   [71962, 101646, 101663, 126351, 141883]


7 commentaires

Est-il nécessaire d'avoir une série ici? Je pense qu'il serait plus facile de jouer avec un fichier de données.


Non, peut convertir en Dataframe aussi


Le commandement important des valeurs dans les listes?


Comment se passe [72241] ou [72251] Superset d'autres lignes, autre que lui-même?


@jezrael Aucun ordre n'est pas important


@MOHITMOTWANI Depuis qu'ils ne sont pas inclus nulle part, alors gardez-les comme.


@ user3222101 - La solution a été modifiée un peu modifiée, veuillez vérifier.


3 Réponses :


1
votes

Si la commande n'est pas importante, vous pouvez utiliser un peu changé Cette Solution - Conversion des listes intérieures à Set Code > S PREMIER ET DERNIER CONVERT DERNIER:

s = pd.Series(eliminate_subsets(list(map(set, s))))
print (s)

0                     [194665, 72197, 82086]
1                                    [72230]
2                     [72690, 72235, 121261]
3                                    [72241]
4                                    [72251]
5                     [101294, 72253, 83613]
6                            [122794, 72255]
7    [101646, 126351, 71962, 141883, 101663]
dtype: object


0 commentaires

1
votes

Vous pouvez essayer ceci:

df = pd.DataFrame({'ser': [[72197, 82086], [72197, 82086, 194665], [72230], [72235, 72690, 121261], [72235, 121261],
                       [72241], [72251], [72253, 83613], [72253, 83613], [72253, 83613, 101294], [72255, 122794],
                          [71962, 101646, 101663, 126351], [71962, 101646, 101663, 126351, 141883],
                          [71962, 101646, 101663, 141883], [72235]]})
df

ser
0   [72197, 82086]
1   [72197, 82086, 194665]
2   [72230]
3   [72235, 72690, 121261]
4   [72235, 121261]
5   [72241]
6   [72251]
7   [72253, 83613]
8   [72253, 83613]
9   [72253, 83613, 101294]
10  [72255, 122794]
11  [71962, 101646, 101663, 126351]
12  [71962, 101646, 101663, 126351, 141883]
13  [71962, 101646, 101663, 141883]
14  [72235]

supersets = []
for i, x in enumerate(df['ser']):
    a = np.array([set(x).issuperset(set(row)) for row in df['ser']])
    a = np.delete(a, i)
    if any(a):
        supersets.append(x)
print(supersets)
[[72197, 82086, 194665], [72235, 72690, 121261], [72235, 121261], [72253, 83613], [72253, 83613], [72253, 83613, 101294], [71962, 101646, 101663, 126351, 141883]]


0 commentaires

0
votes

Si vous utilisez une liste normale, je suppose que vous pouvez utiliser SET (A) XXX


0 commentaires