Вам нужно 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
Ваш подход:
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)).