#python #pandas #dataframe
#python #pandas #dataframe
Вопрос:
У меня есть фрейм данных с тремя столбцами: подписчик, пользователь и соотношение.
Для каждого уникального элемента в u я хотел бы знать, сколько раз это происходило, и удалять строки, соответствующие элементам, которые встречаются, скажем, менее 5 раз. Вот мой код, он неэффективен. Я хотел бы знать, как правильно это написать.
known_follower_id= np.unique(following_df.follower.values) # IDs of members of the list in the saved database
userid, counts = np.unique(following_df.user.values, return_counts= True) # ID of people they followed in the saved database
count_idx=np.argsort(-counts) # number of times a user was followed
trimmed_following_df= following_df.copy(deep= True)
th = 5
idx_th = counts< th
userid_removed = userid[idx_th]
idx_userid_rem= [i for i,v in enumerate(trimmed_following_df.user.values) if v in userid_removed]
trimmed_following_df=trimmed_following_df.drop(idx_userid_rem)
Комментарии:
1. Не могли бы вы опубликовать образец набора данных и желаемый результат. Я думаю, что я получил вопрос, но хочу быть уверенным, что результат соответствует заданному.
Ответ №1:
Вместо данных, вот как я бы это сделал. Посмотрите, поможет ли это вам получить то, что вы хотите.
import pandas as pd
df = pd.DataFrame({
'follower': ['John', 'Jane', 'Jack', 'Suzy', 'Kate', 'Mark', 'Alex', 'Boby', 'Cris', 'Duke'],
'user': ['milk', 'milk', 'milk', 'milk', 'milk', 'milk', 'pear', 'pear', 'wire', 'silk'],
'ratio': [.4, .4, .5, .2, .6, .3, .5, .8, .9, .2]})
print (df)
df['usercount'] = df['user'].map(df['user'].value_counts())
df = df[df['usercount'] > 5]
df.drop(columns=['usercount'],inplace=True)
print (df)
Результатом этого будет:
Исходный фрейм данных:
follower user ratio
0 John milk 0.4
1 Jane milk 0.4
2 Jack milk 0.5
3 Suzy milk 0.2
4 Kate milk 0.6
5 Mark milk 0.3
6 Alex pear 0.5
7 Boby pear 0.8
8 Cris wire 0.9
9 Duke silk 0.2
Обновленный фрейм данных:
follower user ratio
0 John milk 0.4
1 Jane milk 0.4
2 Jack milk 0.5
3 Suzy milk 0.2
4 Kate milk 0.6
5 Mark milk 0.3