【问题标题】:Extracting unique price values from dataframe depending on real estate id根据房地产 ID 从数据框中提取唯一价格值
【发布时间】:2021-10-05 09:38:17
【问题描述】:

我有一个数据框,其中的数据来自这样的数据库:

conn = sqlite3.connect('REDB.db')
dataAvg1 = pd.read_sql_query(
     "SELECT UNIQUE_RE_NUMBER, TYP_ID, LOCATION, RE_PRICE, PRICE.RE_ID, PRICE.UPDATE_DATE, HOUSEINFO.RE_POLOHA, HOUSEINFO.RE_DRUH, HOUSEINFO.RE_TYP, HOUSEINFO.RE_UPLOCHA FROM PRICE INNER JOIN REAL_ESTATE, ADDRESS, HOUSEINFO ON REAL_ESTATE.ID=PRICE.RE_ID AND REAL_ESTATE.ID=ADDRESS.RE_ID AND REAL_ESTATE.ID=HOUSEINFO.INF_ID",conn
)
dataAvg2 = pd.read_sql_query(
     "SELECT UNIQUE_RE_NUMBER, TYP_ID, LOCATION, RE_PRICE, PRICE.RE_ID, PRICE.UPDATE_DATE, FLATINFO.RE_DISPOZICE, FLATINFO.RE_DRUH, FLATINFO.RE_PPLOCHA FROM PRICE INNER JOIN REAL_ESTATE, ADDRESS, FLATINFO ON REAL_ESTATE.ID=PRICE.RE_ID AND REAL_ESTATE.ID=ADDRESS.RE_ID AND REAL_ESTATE.ID=FLATINFO.INF_ID",conn
)
dataAvg3 = pd.read_sql_query(
     "SELECT UNIQUE_RE_NUMBER, TYP_ID, LOCATION, RE_PRICE, PRICE.RE_ID, PRICE.UPDATE_DATE, LANDINFO.RE_PLOCHA, LANDINFO.RE_DRUH, LANDINFO.RE_SITE, LANDINFO.RE_KOMUNIKACE FROM PRICE INNER JOIN REAL_ESTATE, ADDRESS, LANDINFO ON REAL_ESTATE.ID=PRICE.RE_ID AND REAL_ESTATE.ID=ADDRESS.RE_ID AND REAL_ESTATE.ID=LANDINFO.INF_ID",conn
)
conn.close()

df2 = [dataAvg1, dataAvg2, dataAvg3]
dfAvg = pd.concat(df2)
dfAvg = dfAvg.reset_index(drop=True)

主要列是 UNIQUE_RE_NUMBER、RE_PRICE 和 UPDATE_DATE。我想计算每天价格变化的频率。理想情况下,创建一个名为“频率”的新列,并为每天添加一个数字。例如:

UPDATE_DAY       UNIQUE_RE_NUMBER      RE_PRICE    FREQUENCY
1.1.2021                 1                500          2
1.1.2021                 2                400          2
2.1.2021                 1                500          1
2.1.2021                 2                450          1

我希望这个例子是可以理解的。

现在我有这样的东西:

dfAvg['FREQUENCY'] = dfAvg.groupby('UPDATE_DATE')['UPDATE_DATE'].transform('count')
dfAvg.drop_duplicates(subset=['UPDATE_DATE'], inplace=True)

此代码计算当天添加的每个价格,因此当 2021 年 1 月 1 日房地产价格为 500 并且第二天也是 500 时,它被视为价格“变化”,但实际上价格保持不变一样,我不想算。我只想为每个房地产选择不同的价格值。有可能吗?

【问题讨论】:

  • 请更好地解释您的问题并从数据中发布示例
  • 你试过nunique吗?无论如何,提供mre 几乎总是一个好主意:用户可以更好地了解您的问题,而不必自己创建。
  • 我已经更新了问题,真的不知道要添加什么,我希望它现在可以理解了。

标签: python pandas dataframe unique distinct


【解决方案1】:

不确定这是否是最有效的方法,但也许有帮助:

def ident_deltas(sdf):
    return sdf.assign(
        DELTA=(sdf.RE_PRICE.shift(1) != sdf.RE_PRICE).astype(int)
    )

def sum_deltas(sdf):
    return sdf.assign(FREQUENCY=sdf.DELTA.sum())

df = (
    df.groupby("UNIQUE_RE_NUMBER").apply(ident_deltas)
      .groupby("UPDATE_DAY").apply(sum_deltas)
      .drop(columns="DELTA")
)

结果

df = 
  UPDATE_DAY  UNIQUE_RE_NUMBER  RE_PRICE
0 2021-01-01                 1       500
1 2021-01-01                 2       400
2 2021-02-01                 1       500
3 2021-02-01                 2       450

  UPDATE_DAY  UNIQUE_RE_NUMBER  RE_PRICE  FREQUENCY
0 2021-01-01                 1       500          2
1 2021-01-01                 2       400          2
2 2021-02-01                 1       500          1
3 2021-02-01                 2       450          1

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 2021-10-18
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多