![](/img/trans.png)
[英]Split a DataFrame row into multiple rows based on integer value in Pandas
[英]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.