Pandas:根据列中的值将行拆分为多行

时间:2016-10-25 19:31:51

标签: python pandas

我的数据看起来像:

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

我对大熊猫很新,并且有轻微的蟒蛇经验,并且有点坚持如何继续这样做。

1 个答案:

答案 0 :(得分:0)

我为每个Name创建一个Person类,并将原始数据输入其中。您必须编写执行操作的函数:“Mo-We” - > [“星期一”,“星期二”,“星期三”],“M& TUE” - > [“星期一”,“星期二”]和“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.to_dicts()并将其附加到DataFrame:

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