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

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

Pandas:按復(fù)雜條件合并組內(nèi)的兩行

Pandas:按復(fù)雜條件合并組內(nèi)的兩行

幕布斯7119047 2023-07-05 11:06:52
我有一個 df 如下;將 pandas 導(dǎo)入為 pddf = pd.DataFrame({    "ID": ['company A', 'company A', 'company A', 'company B','company B', 'company B', 'company C', 'company C','company C','company C', 'company D', 'company D','company D'],    'Sender': [28, 'delete', 'flag_source', 56, 28, 312, 'delete', 'flag_source', 78, 102, 26, 101, 96],    'Receiver': [129, 28, 'delete', 172, 56, 28, 61, 'delete', 12, 78, 98, 26, 101],    'Date': ['2020-04-12', '2020-03-20', '2020-03-20', '2019-02-11', '2019-01-31', '2018-04-02', '2020-06-29', '2020-06-29', '2019-11-29', '2019-10-01', '2020-04-03', '2020-01-30', '2019-10-18'],    'Sender_type': ['house', 'temp', 'house', 'house', 'house', 'house', 'temp', 'house', 'house','house','house', 'temp', 'house'],    'Receiver_type': ['house', 'house', 'temp', 'house','house','house','house', 'temp', 'house','house','house','house','temp'],    'Price': [32, 50, 47, 21, 23, 19, 52, 39, 12, 22, 61, 53, 19]})它是這樣的:           ID       Sender Receiver        Date Sender_type Receiver_type  Price  0   company A           28      129  2020-04-12       house         house  32 1   company A       delete       28  2020-03-20        temp         house  50 # combine this row with below2   company A  flag_source   delete  2020-03-20       house          temp  47 # combine this row with above3   company B           56      172  2019-02-11       house         house  21 4   company B           28       56  2019-01-31       house         house  23 5   company B          312       28  2018-04-02       house         house  19 我希望通過以下規(guī)則合并/合并每個組“ID”(公司 x)的兩行:將“Sender”中包含“flag_source”的行及其上面的行合并為一個新行。在這個新行中:Sender 是 flag_source,'Revceiver' 是其上面的值(刪除兩個 'delete' 值),Date 是上面的日期,Sender_type 和 Receiver_type 是 'house','Price' 是上面的上一個值價值。然后刪除兩行。例如,對于 A 公司,它將合并第 1 行和第 2 行以生成以下新行:ID        Sender        Receiver  Date        Sender_type  Receiver_type  Pricecompany A flag_source   28        2020-03-20  house        house          50
查看完整描述

3 回答

?
躍然一笑

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

import pandas as pd


df = pd.DataFrame({

    "ID": ['company A', 'company A', 'company A', 'company B','company B', 'company B', 'company C', 'company C','company C','company C', 'company D', 'company D','company D'],

    'Sender': [28, 'delete', 'flag_source', 56, 28, 312, 'delete', 'flag_source', 78, 102, 26, 101, 96],

    'Receiver': [129, 28, 'delete', 172, 56, 28, 61, 'delete', 12, 78, 98, 26, 101],

    'Date': ['2020-04-12', '2020-03-20', '2020-03-20', '2019-02-11', '2019-01-31', '2018-04-02', '2020-06-29', '2020-06-29', '2019-11-29', '2019-10-01', '2020-04-03', '2020-01-30', '2019-10-18'],

    'Sender_type': ['house', 'temp', 'house', 'house', 'house', 'house', 'temp', 'house', 'house','house','house', 'temp', 'house'],

    'Receiver_type': ['house', 'house', 'temp', 'house','house','house','house', 'temp', 'house','house','house','house','temp'],

    'Price': [32, 50, 47, 21, 23, 19, 52, 39, 12, 22, 61, 53, 19]

})


flaggedData = (df[df["Sender"] == "flag_source"])


for i,row in flaggedData.iterrows():  # Row variable contains row having sender as flag_source


    deleteRow = df[df.index == i-1].values[0]   # delete variable contains row having sender as delete


    combined = [row[0],  # ID

                row[1],  # Sender

                deleteRow[2],  # Receiver

                deleteRow[3],  # Date

                row[4],  # Sender_type

                deleteRow[5],  # Receiver_type

                deleteRow[6]]  # Price


    df.loc[i-1] = combined  # replace with new values

    df = df.drop(index=i)  # drop old values


df = df.reset_index()  # resent index for better access on future.

print(df.loc[1])

我假設(shè)每個“刪除”行都位于“flag_source”行上方。如果你還是不明白,請閱讀評論,評論你的疑問。


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

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

如果delete/flag_source始終位于同一日期,并且該日期+ ID上沒有其他行,則可以對ID和日期使用groupby聚合函數(shù)以避免使用長循環(huán)。如果您的數(shù)據(jù)順序不正確,您始終可以sort_values提前進行更改。


cols = df.columns


new_df = df.groupby(['ID', 'Date']).aggregate({

    'Sender': 'last', 

    'Receiver': 'first', 

    'Sender_type': 'last', 

    'Receiver_type': 'first', 

    'Price': 'first'

    }).reset_index()


# Reorder as per original data

new_df[cols].sort_values(['ID', 'Date'], ascending=[1, 0])


查看完整回答
反對 回復(fù) 2023-07-05
?
慕容3067478

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

看來您只需要刪除每對的第二行并替換其余行中的一些值。


df = df[dd.Receiver == 'delete']

df.Sender = df.Sender.str.replace('delete', 'flag_source')

df.Sender_type = df.Sender_type.str.replace('temp', 'house')


查看完整回答
反對 回復(fù) 2023-07-05
  • 3 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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