第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找之前不存在的 customer_id

查找之前不存在的 customer_id

蕭十郎 2023-06-20 16:36:17
我想過濾掉 customer_id's以前數(shù)據(jù)中不存在的那些,所以所有 new_customer_ids這些都是 2020-01-10 的新數(shù)據(jù),而不是 2020-01-01 的Main_dfdate          customer_id   amount_spent 2020-01-01    24            1232020-01-10    24            1452020-01-01    58             892020-01-10    58             672020-01-01    98             342020-01-10    99             862020-01-10    67            1402020-01-10    32            3212020-01-10    75             76輸出_dfnew_customer_id  amount_spent 32           32175            7667           140我曾嘗試在 Pandas 中使用 shift 功能,但這對我不起作用編輯df = pd.DataFrame([["2020-01-01",24,123],["2020-01-10",24,145],["2020-01-01",58,89],["2020-01-10",58,67],["2020-01-01",98,34],["2020-01-10",98,86],["2020-01-10",67,140],["2020-01-10",32,321],["2020-01-10",75,76]],columns = ["date","customer_id","amount_spent" ])
查看完整描述

5 回答

?
動漫人物

TA貢獻1815條經(jīng)驗 獲得超10個贊

這是另一個解決方案,


import numpy as np


mask = df.groupby('customer_id').transform(np.size).eq(1)


    date  amount_spent

0  False         False

1  False         False

2  False         False

3  False         False

4   True          True

5   True          True

6   True          True

7   True          True

8   True          True


df[mask['date'] & df.date.eq('2020-01-10')]

         date  customer_id  amount_spent

5  2020-01-10           99            86

6  2020-01-10           67           140

7  2020-01-10           32           321

8  2020-01-10           75            76


查看完整回答
反對 回復(fù) 2023-06-20
?
烙印99

TA貢獻1829條經(jīng)驗 獲得超13個贊

如果您正在尋找通用方法,這可能是一個解決方案:


df = pd.DataFrame({

    'date':['2020-01-01','2020-01-10','2020-01-01','2020-01-10','2020-01-01','2020-01-10','2020-01-10','2020-01-10','2020-01-10'],

    'customer_id':[24,24,58,58,98,99,67,32,75],

    'amount_spent':[123,145,89,67,34,86,140,321,76]

})

print(df)

         date  customer_id  amount_spent

0  2020-01-01           24           123

1  2020-01-10           24           145

2  2020-01-01           58            89

3  2020-01-10           58            67

4  2020-01-01           98            34

5  2020-01-10           99            86

6  2020-01-10           67           140

7  2020-01-10           32           321

8  2020-01-10           75            76

您正在查找最后兩個日期,因為您的數(shù)據(jù)集可能看起來不同,而且您不知道要查找的日期。所以現(xiàn)在你應(yīng)該找到最后兩個日期。


df=df.sort_values(by='date')

take_last_dates = df.drop_duplicates(subset='date').sort_values(by='date')

take_last_dates = take_last_dates.date.tolist()

print(take_last_dates)

['2020-01-01', '2020-01-10']

現(xiàn)在您需要為這兩個日期創(chuàng)建兩個 DF,以查看客戶的差異:


df_prev = df[

    df.date==take_last_dates[0]

]

print(df_prev)

         date  customer_id  amount_spent

0  2020-01-01           24           123

2  2020-01-01           58            89

4  2020-01-01           98            34

df_current = df[

    df.date==take_last_dates[1]

]


print(df_current)

         date  customer_id  amount_spent

1  2020-01-10           24           145

3  2020-01-10           58            67

5  2020-01-10           99            86

6  2020-01-10           67           140

7  2020-01-10           32           321

8  2020-01-10           75            76

所以最后你可以通過使用這兩個 df 得到你的結(jié)果:


new_customers = df_current[

    ~df_current.customer_id.isin(df_prev.customer_id.tolist())

]


print(new_customers)

         date  customer_id  amount_spent

5  2020-01-10           99            86

6  2020-01-10           67           140

7  2020-01-10           32           321

8  2020-01-10           75            76


查看完整回答
反對 回復(fù) 2023-06-20
?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

假設(shè)您的示例中有錯字(99 是 98)。您可以執(zhí)行以下操作:


df = pd.DataFrame([["2020-01-01",24,123],

["2020-01-10",24,145],

["2020-01-01",58,89],

["2020-01-10",58,67],

["2020-01-01",98,34],

["2020-01-10",98,86],

["2020-01-10",67,140],

["2020-01-10",32,321],

["2020-01-10",75,76]],columns = ["date","customer_id","amount_spent" ])


df["order"] = df.groupby("customer_id").cumcount()


df[(df["date"] == "2020-01-10") & (df["order_x"]==0)]

輸出:


    date        customer_id amount_spent    order_x order_y

6   2020-01-10  67          140             0       0

7   2020-01-10  32          321             0       0

8   2020-01-10  75          76              0       0

這將需要根據(jù)您的 df 的復(fù)雜性進行編輯


查看完整回答
反對 回復(fù) 2023-06-20
?
繁華開滿天機

TA貢獻1816條經(jīng)驗 獲得超4個贊

這就是你注意到的。不確定您的示例數(shù)據(jù)和輸出是否如您所想。我在 2020-01-10 將客戶 99 更改為 98

  1. 創(chuàng)建一個掩碼,它是您所需日期之前/之后的行

  2. 選擇切換日期之后(包括切換日期)的行,減去切換日期之前存在的客戶isin()

import datetime as dt

df = pd.read_csv(io.StringIO("""date          customer_id   amount_spent 

2020-01-01    24            123

2020-01-10    24            145

2020-01-01    58             89

2020-01-10    58             67

2020-01-01    98             34

2020-01-10    98             86

2020-01-10    67            140

2020-01-10    32            321

2020-01-10    75             76"""), sep="\s+")


df["date"] = pd.to_datetime(df["date"])

mask = df["date"] < dt.datetime(2020,1,10)

dfnew = df[~mask & ~df["customer_id"].isin(df.loc[mask,"customer_id"])].groupby("customer_id").sum()


print(dfnew.to_string())

輸出


             amount_spent

customer_id              

32                    321

67                    140

75                     76


查看完整回答
反對 回復(fù) 2023-06-20
?
達令說

TA貢獻1821條經(jīng)驗 獲得超6個贊

IIUC 你可以customer_id在 中獲取禮物2020-01-01,然后過濾掉它們:


s = df.loc[df["date"]=="2020-01-01", "customer_id"]


print (df[~df["customer_id"].isin(s)])


         date  customer_id  amount_spent

5  2020-01-10           99            86

6  2020-01-10           67           140

7  2020-01-10           32           321

8  2020-01-10           75            76


查看完整回答
反對 回復(fù) 2023-06-20
  • 5 回答
  • 0 關(guān)注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號