Python 非比例随机抽样

Python 非比例随机抽样,python,pandas,numpy,Python,Pandas,Numpy,我有一个熊猫数据帧,比如这个: deviceID timestamp time_since_previous_timestamp A 3 NaN A 14 11 A 127 113 A 133 6 # 7k other data points for device

我有一个
熊猫数据帧
,比如这个:

deviceID    timestamp   time_since_previous_timestamp
A           3           NaN            
A           14          11            
A           127         113
A           133         6              
# 7k other data points for deviceID = A                                  
B           1           NaN 
B           12          11
# 1.5k other datapoints for deviceID = B                                  
C           42          NaN
C           48          6
# 600 other data points for deviceID = C
以此类推,基本上我无法控制每个
设备id
有多少个数据点,它可能会有很大的变化

为了绘制一些东西,而不会因为某些
deviceID
的数据点比其他的多得多而扭曲我的绘图,我考虑对我的数据帧进行随机抽样,目的是从每个
deviceID
中获得大约相同数量的数据点(即:我的样本将有约400行
deviceID=A
,约400行
deviceID=B
,约400行
deviceID=C
,依此类推)

我该怎么做?(使用
pandas
和/或
numpy
和/或两者都不使用)


编辑:我正在绘制的内容:

首先,我对上一个时间戳以来的时间进行分组并计数:

time_since_previous_timestamp         count
NaN                                   3
6                                     2
11                                    2
113                                   1
然后将
count
绘制为y轴,将
time\u自上一个时间戳以来的时间
绘制为x轴。

您可以使用指定
n=400
组合,然后使用如下方式连接所有零件:

df = pd.concat([df.loc[df.ID == 'A'].sample(n=400),df.loc[df.ID == 'B'].sample(n=400),df.loc[df.ID == 'C'].sample(n=400)])
示例测试:

#df:
#    B ID
#0  10  A
#1   9  A
#2   8  A
#3   7  A
#4   6  B
#5   5  B
#6   4  B
#7   3  C
#8   2  C
#9   1  C

df = pd.concat([df.loc[df.ID == 'A'].sample(n=2),df.loc[df.ID == 'B'].sample(n=2),df.loc[df.ID == 'C'].sample(n=2)])
输出:

    B ID
0  10  A
3   7  A
6   4  B
5   5  B
8   2  C
7   3  C
您还可以修复
random_state
以始终具有相同的随机样本


我相信这就是你所要求的。

你将绘制什么?我不确定这是否相关,但我已经在OP中为你的问题添加了答案。请注意,我也修改了数据集。