基于标准的Pandas样本

83qze16e  于 2023-05-05  发布在  其他
关注(0)|答案(2)|浏览(124)

我想使用pandas sample函数,但没有分组或过滤数据的标准。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(low=0, high=5, size=(10000, 2)),columns=['a', 'b'])

print(df.sample(n=100))

这将采样100行,但是如果我想在df['a']中采样包含0的50行到包含1的50行呢?

wfsdck30

wfsdck301#

您可以使用==运算符来创建布尔值的列表 *。当上述列表放入getter([])时,它将过滤值。如果需要,可以使用n=50创建50行的样本大小。

新增代码

df[df['a']==1].sample(n=50)

完整代码

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(low=0, high=5, size=(10000, 2)),columns=['a', 'b'])

print(df[df['a']==1].sample(n=50))
  • 在本文中,列表并不是字面上的列表,但它是一个解释它如何工作的好词。从技术上讲,它是一个DataFrame,将行Map到true/false值。

更隐晦的DataFrame采样

如果您想对a为1或0的所有50个样本进行采样:

print(df[(df['a']==1) | (df['a']==0)].sample(n=50))

如果你想要50个样品:

df1 = df[df['a']==1].sample(n=50)
df0 = df[df['a']==0].sample(n=50)
print(pd.concat([df1,df0]))
xam8gpfp

xam8gpfp2#

这里有一个解决方案,它将支持您喜欢的任意多个值(例如0、1、2、3):

selected_rows = df.groupby('a', group_keys=False).apply(lambda x: x.sample(n=50))

相关问题