python-根据列中的值重复行x次 [英] python - Duplicate rows x number of times based on a value in a column
本文介绍了python-根据列中的值重复行x次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在旅馆预订时有一个熊猫数据框.每行都是一个预订,像这样:
I have a pandas dataframe of bookings at a hotel. Each row is a booking, like this:
Name Arrival Departure RoomNights
Trent Cotchin 29/10/2017 2/11/2017 4
Dustin Martin 1/11/2017 4/11/2017 3
Alex Rance 2/11/2017 3/11/2017 1
我想使用python进行转换,以便每一行成为一个roomnight.输出看起来像这样:
I want to use python to convert so that each row becomes a roomnight. The output would look like this:
Name Arrival Departure RoomNights RoomNight Date
Trent Cotchin 29/10/2017 2/11/2017 4 29/10/2017
Trent Cotchin 29/10/2017 2/11/2017 4 30/10/2017
Trent Cotchin 29/10/2017 2/11/2017 4 31/10/2017
Trent Cotchin 29/10/2017 2/11/2017 4 1/11/2017
Dustin Martin 1/11/2017 4/11/2017 3 1/11/2017
Dustin Martin 1/11/2017 4/11/2017 3 2/11/2017
Dustin Martin 1/11/2017 4/11/2017 3 3/11/2017
Alex Rance 2/11/2017 3/11/2017 1 2/11/2017
这使我可以轻松求和任何给定日期/月份的房晚总数.
This allows me to easily sum the total number of roomnights for any given day/month.
推荐答案
使用:
#convert columns to datetime
df['Arrival'] = pd.to_datetime(df['Arrival'])
df['Departure'] = pd.to_datetime(df['Departure'])
#repeat rows
df = df.loc[df.index.repeat(df['RoomNights'])]
#group by index with transform for date ranges
df['RoomNight Date'] =(df.groupby(level=0)['Arrival']
.transform(lambda x: pd.date_range(start=x.iat[0], periods=len(x))))
#unique default index
df = df.reset_index(drop=True)
print (df)
Name Arrival Departure RoomNights RoomNight Date
0 Trent Cotchin 2017-10-29 2017-11-02 4 2017-10-29
1 Trent Cotchin 2017-10-29 2017-11-02 4 2017-10-30
2 Trent Cotchin 2017-10-29 2017-11-02 4 2017-10-31
3 Trent Cotchin 2017-10-29 2017-11-02 4 2017-11-01
4 Dustin Martin 2017-11-01 2017-11-04 3 2017-11-01
5 Dustin Martin 2017-11-01 2017-11-04 3 2017-11-02
6 Dustin Martin 2017-11-01 2017-11-04 3 2017-11-03
7 Alex Rance 2017-11-02 2017-11-03 1 2017-11-02
这篇关于python-根据列中的值重复行x次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文