我有一个包含用户和他们的数据的大框架。每个用户可以有多行。我想每个用户采样1行。我目前的解决方案似乎效率低下:
df1 = pd.DataFrame({'User': ['user1', 'user1', 'user2', 'user3', 'user2', 'user3'],
'B': ['B', 'B1', 'B2', 'B3','B4','B5'],
'C': ['C', 'C1', 'C2', 'C3','C4','C5'],
'D': ['D', 'D1', 'D2', 'D3','D4','D5'],
'E': ['E', 'E1', 'E2', 'E3','E4','E5']},
index=[0, 1, 2, 3,4,5]
userList = list(df1.User.unique())
usersSample = pd.DataFrame() # empty dataframe, to save samples
for i in userList:
usersSample=usersSample.append(df1[df1.User == i].sample(1))
> usersSample
B C D E User
0 B C D E user1
4 B4 C4 D4 E4 user2
3 B3 C3 D3 E3 user3
字符串
有没有更有效的方法来实现这一点?
4条答案
按热度按时间cyvaqqii1#
这就是你想要的:
字符串
的数据
没有额外的索引:
型
的
f0ofjuux2#
根据每个用户的行数,这可能更快:
字符串
o75abkj43#
字符串
使用DataFrame.groupby.apply和lambda函数对sample1
kgqe7b3p4#
.drop_duplicates
应该可以正常工作:字符串
这将在列“User”中保留值的每个第一次出现,并返回相应的行。