Используйте Series.str.len
для длин, а затем получите максимальные значения индекса для групп по DataFrameGroupBy.idxmax
и последний выбор по DataFrame.loc
:
df1 = df.loc[df['Description'].str.len().groupby(df['Video_ID'], sort=False).idxmax()]
print (df1)
Video_ID Description
1 mv89psg6zh4 A faucet is running while a bird stands and is...
6 l7x8uIdg2XU A woman is pouring ingredients into a bowl and...
Подробности :
print (df['Description'].str.len())
0 28
1 68
2 19
3 40
4 43
5 44
6 62
7 37
8 35
9 32
Name: Description, dtype: int64
print (df['Description'].str.len().groupby(df['Video_ID'], sort=False).idxmax())
Video_ID
mv89psg6zh4 1
l7x8uIdg2XU 6
Name: Description, dtype: int64
Для фильтра возможны несогласованные строки, используйте Index.isin
с инвертированной маской ~
и boolean indexing
:
df2 = df[~df.index.isin(df1.index)]
print (df2)
Video_ID Description
0 mv89psg6zh4 A bird is bathing in a sink.
2 mv89psg6zh4 A bird gets washed.
3 mv89psg6zh4 A parakeet is taking a shower in a sink.
4 mv89psg6zh4 The bird is taking a bath under the faucet.
5 mv89psg6zh4 A bird is standing in a sink drinking water.
7 l7x8uIdg2XU A woman is adding milk to some pasta.
8 l7x8uIdg2XU A person adds ingredients to pasta.
9 l7x8uIdg2XU the girls are doing the cooking.
РЕДАКТИРОВАТЬ: Решение выше возвращает только один ряд максимальной длины на группы. (Здесь работает то же самое, потому что только одна максимальная длина для групп в данных выборки)
Если требуется несколько максимальных длин для групп, возможна максимальная длина comapre в GroupBy.transform
:
s = df['Description'].str.len()
mask = s.groupby(df['Video_ID'], sort=False).transform('max').eq(s)
df1 = df[mask]
print (df1)
Video_ID Description
1 mv89psg6zh4 A faucet is running while a bird stands and is...
6 l7x8uIdg2XU A woman is pouring ingredients into a bowl and...
df2 = df[~mask]
print (df2)
Video_ID Description
0 mv89psg6zh4 A bird is bathing in a sink.
2 mv89psg6zh4 A bird gets washed.
3 mv89psg6zh4 A parakeet is taking a shower in a sink.
4 mv89psg6zh4 The bird is taking a bath under the faucet.
5 mv89psg6zh4 A bird is standing in a sink drinking water.
7 l7x8uIdg2XU A woman is adding milk to some pasta.
8 l7x8uIdg2XU A person adds ingredients to pasta.
9 l7x8uIdg2XU the girls are doing the cooking.
Детали:
print (s.groupby(df['Video_ID'], sort=False).transform('max'))
0 68
1 68
2 68
3 68
4 68
5 68
6 62
7 62
8 62
9 62
Name: Description, dtype: int64