簡體   English   中英

熊貓:根據列中的值將行分為多行

[英]Pandas: split row into multiple rows based on value in column

我有看起來像的數據:

Name EID Schedule
A    001 Mo-We 6a-6a 
B    002 Mo-We 6a-1a
C    003 M&TUE&W&THU 6A-1A

我希望數據最終看起來像

Name EID DOW StartHour EndHour
A    001 Monday 6      6
A    001 Tuesday 6     6
A    001 Wednesday 6   6
B    002 Monday 6      1
B    002 Tuesday 6     1
B    002 Wednesday 6   1
C    003 Monday    6   1
C    003 Tuesday 6     1
C    003 Wednesday 6   1
C    003 Thursday  6   1

我對熊貓還很陌生,並且擁有豐富的python經驗,並且對如何進行此操作有些困惑。

我將為每個Name創建一個Person類,並將您擁有的原始數據輸入其中。 您將必須編寫執行該操作的函數:“ Mo-We”-> [“ Monday”,“ Tuesday”,“ Wednesday”],“ M&TUE”-> [“ Monday”,“ Tuesday”]和“ 6a- 6a“->(6,6)。

我還沒有編寫那些解析函數,但是如果您也堅持這樣做的話,我可以為您提供幫助。 這是入門的結構:

class Person:
    def __init__(self, name, eid, raw_days, raw_timings):
        self.name = name
        self.eid = int(eid)
        self.days = parse_days(raw_days)  # ["Monday", "Tuesday", "Wednesday"]
        self.start_hour, self.end_hour = parse_timings(raw_timings)  # (int, int)

    def to_dicts(self):
        dicts = []
        for day in self.days:
            dicts.append({"Name": self.name, "EID": self.eid, "DOW": day, "StartHour": self.start_hour, "EndHour": self.end_hour})

        return dicts


def parse_days(raw_days):
    return []


def parse_timings(raw_timings):
    return None, None

解析所有輸入數據並獲得Person對象的列表之后,您可以在每個person上調用person.to_dicts()並將其附加到DataFrame:

for person in persons:
    df.append(person.to_dicts())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM