我有一个叫做house的pandas数据框。一栏是houseID,我想获得只有1000个不同房屋的信息。有超过1行具有相同的houseID(具有更多或更少行数的房屋)。为此,我不能只获得1000个第一行,我需要这样的东西:
SELECT * FROM houses WHERE COUNT(DISTINCT houseID) <= 1000
简化示例(具有3个不同houseID的原始数据帧,在此缩减示例中我想要2个不同的houseID):
from collections import OrderedDict
import pandas as pd
housesDict = OrderedDict([ ('houseID', ['1', '3', '1','2','2','1','3','1','1']),
('Cost', [150, 200, 50,100,75,18,10,23,19])])
houses = pd.DataFrame.from_dict(housesDict)
print(houses)
如果我想将不同数量的房屋限制为2,我的预期输出是:
housesDict = OrderedDict([ ('houseID', ['1', '3', '1','1','3','1','1']),
('Cost', [150, 200, 50,18,10,23,19])])
houses = pd.DataFrame.from_dict(sales)
print(houses)
我该怎么做?
编辑: 我有解决方案,谢谢你的帮助:
a = list(df.drop_duplicates(subset=["houseID"]).iloc[:2]['houseID'])
df[df['houseID'].isin(a)]
答案 0 :(得分:1)
如果您想要不同的值,只需使用drop_duplicates
即可df = df.drop_duplicates(subset=["houseID"]).iloc[:1000]
如果要限制重复次数,可以将groupby.transform('count')与布尔索引一起使用。
df.loc[df.groupby("houseID")["houseID"].transform('count') < 3].iloc[:1000]
编辑:误解了这个问题,你可以使用上面的函数来索引值。
# gets first 1000 unique id's
unique_ids = df.drop_duplicates(subset=["houseID"]).iloc[:1000]["houseID"]
# selects rows if their ID's are in unique_id dataframe
df = df.loc[df["houseID"].isin(unique_ids)]