我有一个pandas数据框,我想按权重采样值,并且我知道有df.sample
函数。
但是我需要的问题是获取一个在数据框列中具有N
个唯一元素的示例
任何人都可以做类似的事情吗?
修改
示例:
我有一个包含1列的数据框:
df = pd.DataFrame([1,1,1,2,3,1,2,1,2,1,4,5,2,3,4,4,5,4])
我要采样,并在采样中要获得3个唯一值:
可能的最终结果:
[1,1,1,2,3,2,3]
我对3个不同的值进行采样,但样本量较大
再次编辑
我需要对数据进行采样,直到1列中有N个不同的值
答案 0 :(得分:0)
您可以用不同的方式来解决这个问题,可以通过
调整数据帧的顺序df = df.sample(len(df))
,然后从您需要的唯一列中删除重复项
df = df.drop_duplicated(subset = "colname")
这将使您为每个值保留一行,您可以像以前一样通过对df进行混洗来获得随机样本。
答案 1 :(得分:0)
我认为您需要DataFrame.drop_duplicates
和DataFrame.sample
,然后先用isin
用boolean indexing
过滤,然后再应用this solution:
df = pd.DataFrame([1,1,1,2,3,2,3,2,3,1,4,5,3,4,5,2,3,2], columns=['col'])
positions = df['col'].value_counts(normalize=True).to_dict()
print (positions)
{3: 0.2777777777777778,
2: 0.2777777777777778,
1: 0.2222222222222222,
5: 0.1111111111111111,
4: 0.1111111111111111}
def sample(obj, replace=False, total=20):
return obj.sample(n=int(positions[obj.name] * total), replace=replace)
N = 3
v = df["col"].drop_duplicates().sample(n=N)
df1 = df[df['col'].isin(v)].groupby('col', group_keys=False).apply(sample).sort_index()
print (df1)
col
3 2
4 3
5 2
6 3
7 2
8 3
10 4
12 3
13 4
15 2
16 3
17 2