在pandas中使用随机数据对进行选择

时间:2016-08-04 17:45:59

标签: python pandas

我有一个包含三列的非常大的文件。前两个是整数,第三个是字符串。我使用

使用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的操作。然后从此唯一列表中选择随机对,然后使用它们从原始数据帧中进行选择。

  

有没有办法在熊猫中有效地做到这一点?

1 个答案:

答案 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=2col2=1的所有行:

df[['col1', 'col2']].drop_duplicates().sample(n=1).merge(df)
Out: 
   col1  col2        col3
0     2     1  Somestuff2
1     2     1  Somestuff3