我有一个表,有用户,食物,哪一个是他们的最爱。
| 用户|食物|是收藏夹|
| --------------|--------------|--------------|
| 1|牛肉|假的|
| 1|Pig肉|假的|
| 三|Pig肉|假的|
| 三|牛肉|假的|
| 三|马铃薯|假的|
| 四|牛肉|假的|
同一个用户出现在多行中。我需要将其中一行 * 每个用户 * 设置为收藏夹(is_favorite
=True):
| 用户|食物|是收藏夹|
| --------------|--------------|--------------|
| 1|牛肉|真的|
| 1|Pig肉|假的|
| 三|Pig肉|真的|
| 三|牛肉|假的|
| 三|马铃薯|假的|
| 四|牛肉|真的|
现在每个用户都有一个最喜欢的食物。
我成功地为每个用户获取了1行,但无法将其应用于我的初始df
。我很确定我缺少一些简单的东西,但我不太了解pandas。这也感觉这样做是错误的:
import pandas as pd
df = pd.DataFrame(
dict(
user=[1, 1, 3, 3, 3, 4],
food=['Beef', 'Pork', 'Pork', 'Beef', 'Potatoes', 'Beef'],
is_favorite=[False, False, False, False, False, False]))
# This works. It gives me exactly 1 row per user
first_food_per_user = df.groupby('user').nth(0).reset_index()
# This doesn't work
for _, row in first_food_per_user.iterrows():
df['is_favorite'].loc[
(df['user'] == row['user'])
&
df['food'] == row['food'],
] = True
1条答案
按热度按时间0x6upsns1#
不需要
groupby
,只需要使用duplicated
和布尔索引:输出:
如果你想设置一个随机行,使用
groupby.sample
:示例: