【问题标题】:How can I select limiting the count of a column dataframe? PYTHON如何选择限制列数据框的计数? PYTHON
【发布时间】:2017-03-08 09:19:27
【问题描述】:

我有一个名为 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)]

【问题讨论】:

  • 您想要的结果与您的问题描述不符,例如为什么 2 在它也有 2 个与 3 相同的不同销售额时被排除在外?除了df.groupby('houseID').filter(lambda x: len(x) &lt;= 2)之后你还在吗?
  • @EdChum 我想要 1000 个不同的 houseID 的所有行。总的来说,在我的表中,我需要 1000 个不同的 houseID,我希望在这 1000 个不同的 houseID 的原始数据框中拥有所有行

标签: python dataframe


【解决方案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)]

【讨论】:

  • 我想要 1000 个不同 houseID 的所有行。在我的示例中,我有 3 个不同的 houseID,我只想要 2 个不同的 houseID(例如,在我的原始数据集中,我有超过 1 M 的不同 houseID,我想要 1000 个不同 houseID 的所有行)
  • @zorro 你试过drop_duplicates 它会给你1000行(如果存在)不同的houseID和它们的行(第一次看到)。
  • 我想要像SELECT * FROM houses WHERE COUNT(DISTINCT houseID) &lt;= 1000 这样的东西,包含数据框和houseID 列:S
  • 啊,现在知道了,您可以根据获得的值使用过滤器或索引,让我编辑我的答案。
  • 感谢您的帮助;)
猜你喜欢
  • 2012-12-26
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 2018-12-02
  • 1970-01-01
  • 2019-03-04
  • 2019-12-23
相关资源
最近更新 更多