我想使用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行。
答案 0 :(得分:4)
您可以使用==
运算符创建布尔值列表*。当所述列表放入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。
如果要对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]))