#python #python-3.x #pandas
#python #python-3.x #pandas
Вопрос:
итак, у меня есть список
my_list = [1,1,2,3,4,4]
У меня есть фрейм данных, который выглядит следующим образом
col_1 col_2
a 1
b 1
c 2
d 3
e 3
f 4
g 4
h 4
Я в основном хочу, чтобы окончательный фрейм данных выглядел так
col_1 col_2
a 1
b 1
c 2
d 3
f 4
g 4
В принципе, я не могу использовать
my_df[my_df['col_2'].isin(my_list)]
поскольку это будет включать все строки. Я хочу, чтобы первая строка соответствовала каждому элементу в списке, но все то же количество строк.
Ответ №1:
Используйте GroupBy.cumcount
для счетчика с исходным и вспомогательным фреймом данных и фильтруйте по внутреннему соединению DataFrame.merge
:
my_list = [1,1,2,3,4,4]
df1 = pd.DataFrame({'col_2':my_list})
df1['g'] = df1.groupby('col_2').cumcount()
my_df['g'] = my_df.groupby('col_2').cumcount()
df = my_df.merge(df1).drop('g', axis=1)
print (df)
col_1 col_2
0 a 1
1 b 1
2 c 2
3 d 3
4 f 4
5 g 4