Удалить несколько элементов в списке Python один раз

Вам нужно transform size - len of df такое же, как и раньше:

import pandas as pd

df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']
                , 'B': ['a', 'c', 'c','b','b']})
print (df)
   A  B
0  x  a
1  x  c
2  x  c
3  y  b
4  y  b

df['size'] = df.groupby(['A', 'B'])['A'].transform('size')
print (df)
   A  B  size
0  x  a     1
1  x  c     2
2  x  c     2
3  y  b     2
4  y  b     2

При необходимости имя столбца в агрегации df - len of df, очевидно, НЕ такое же, как и раньше:

import pandas as pd

df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']
                , 'B': ['a', 'c', 'c','b','b']})
print (df)
   A  B
0  x  a
1  x  c
2  x  c
3  y  b
4  y  b

df = df.groupby(['A', 'B']).size().reset_index(name='Size')
print (df)
   A  B  Size
0  x  a     1
1  x  c     2
2  y  b     2

-1
задан user10121076 17 January 2019 в 04:34
поделиться

1 ответ

Ваш подход:

for x in rem_list:
    num_list.remove(x)

интуитивно понятен, и если списки не будут очень большими, я мог бы сделать это, потому что его легко читать.

Одна альтернатива будет:

result = []
for x in num_list:
    if x in rem_list:
        rem_list.remove(x)
    else:
        result.append(x)

Это будет O (len (rem_list) ^ len (num_list)) и быстрее, чем первое решение, если len (rem_list) < Len (num_list).

Если бы rem_list гарантированно не содержал дубликатов (согласно вашим примерам), вы могли бы вместо этого использовать набор, и сложность была бы O (len (num_list)).

0
ответ дан blueenvelope 17 January 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: