我有一个这样的数据框
data = [['bob', 1], ['joe', 4], ['joe', 1], ['bob', 3], ['joe', 7]]
df = pd.DataFrame(data, columns=['name', 'score'])
print(df)
看起来像
name score
0 bob 1
1 joe 4
2 joe 1
3 bob 3
4 joe 7
我想为每个名称选择一个随机的(不仅仅是使用第一个!)条目,然后删除其余的。
结果可能是
name score
2 joe 1
3 bob 3
或
name score
0 bob 1
4 joe 7
我猜有一种Python方法吗?
答案 0 :(得分:4)
按名称分组,然后从每个分组中抽取一行:
df.groupby('name').apply(lambda x: x.sample(1)).reset_index(drop=True)
reset_index
部分将摆脱由groupby
创建的索引。
答案 1 :(得分:0)
如果您可以访问新版的熊猫,> = 1.1.0,则该功能是pandas.core.groupby.DataFrame.sample内置的
df.groupby('name').sample(n=1)