我有一个包含三列的非常大的文件。前两个是整数,第三个是字符串。我使用
使用pandas阅读data = pd.read_csv("edges+stuff.txt", sep=' ', header=None, dtype={0:np.uint32, 1:np.uint32, 2:np.str})
以下是一些假数据示例:
2 0 Somestuff9
2 0 Somestuff0
1 1 Somestuff5
0 0 Somestuff7
2 0 Somestuff9
2 0 Somestuff5
2 1 Somestuff2
1 1 Somestuff8
1 1 Somestuff2
1 0 Somestuff4
2 1 Somestuff3
0 2 Somestuff9
1 1 Somestuff10
1 0 Somestuff9
我想执行以下随机抽样,我坚持使用。我想从数据框中选择一些随机对。我不想选择随机行,例如" 1 1"发生了四次,但我希望有相同的机会选择数据框中存在的任何一对。如果我选择" 1 1"然后我想输出所有开始的行#1; 1 1"。
使用我的示例假数据,我想从[(0,0),(1,0),(1,1),(0,2),(2,0)中随机选择一些对,( 2,1)](这些是数据中存在的所有对),然后使用这些对从数据帧中选择行。
执行此操作的一种方法是获取前两列,对它们进行排序并执行相当于np.unique
的操作。然后从此唯一列表中选择随机对,然后使用它们从原始数据帧中进行选择。
有没有办法在熊猫中有效地做到这一点?
答案 0 :(得分:2)
以这种方式:
df.head()
Out:
col1 col2 col3
0 2 0 Somestuff9
1 2 0 Somestuff0
2 1 1 Somestuff5
3 0 0 Somestuff7
4 2 0 Somestuff9
随机选择一对:
df[['col1', 'col2']].drop_duplicates().sample(n=1)
Out:
col1 col2
0 2 1
(这里删除重复项会删除具有相同col1 col2对的所有行,除了第一个,.sample(n=1)
选择其中一个。)
包含col1=2
,col2=1
的所有行:
df[['col1', 'col2']].drop_duplicates().sample(n=1).merge(df)
Out:
col1 col2 col3
0 2 1 Somestuff2
1 2 1 Somestuff3