python - 根据条件复制数据框行

标签 python pandas group-by

我有一个看起来像这样的 pandas 数据框:

hotel_id         date         length_of_stay     clicks
A               2019-01-01           3               7
B               2019-01-06           2               11
C               2019-01-03           1               4

我希望结果是:

hotel_id         date                            clicks
A               2019-01-01                          7
A               2019-01-02                          7
A               2019-01-03                          7
B               2019-01-06                          11
B               2019-01-07                          11
C               2019-01-03                          4

因此,我们可以看到有人入住该酒店每晚我们获得了多少点击...

我想不出一个优雅的方式来做到这一点..有人可以帮忙吗?

最佳答案

使用numpy.repeat() :

m= pd.DataFrame(np.repeat(df.values,df.length_of_stay,axis=0),columns=df.columns)
m['date']=m.groupby('hotel_id')['date'].transform(lambda x: pd.date_range(start=x.iloc[0], periods=len(x)))

或:

newdf = pd.DataFrame(np.repeat(df.values,df.length_of_stay,axis=0),columns=df.columns)
newdf['date'] = [i for day, n in zip(df.date,df.length_of_stay) 
                   for i in pd.date_range(start=day, periods=n)]

完整示例:

import pandas as pd
import numpy as np

data = '''\
hotel_id         date         length_of_stay     clicks
A               2019-01-01           3               7
B               2019-01-06           2               11
C               2019-01-03           1               4'''

fileobj = pd.compat.StringIO(data)
df = pd.read_csv(fileobj, parse_dates=['date'], sep='\s+')

m= pd.DataFrame(np.repeat(df.values,df.length_of_stay,axis=0),columns=df.columns)
m['date']=m.groupby('hotel_id')['date'].transform(lambda x: pd.date_range(start=x.iloc[0], periods=len(x)))
print(m)

  hotel_id       date length_of_stay clicks
0        A 2019-01-01              3      7
1        A 2019-01-02              3      7
2        A 2019-01-03              3      7
3        B 2019-01-06              2     11
4        B 2019-01-07              2     11
5        C 2019-01-03              1      4

关于python - 根据条件复制数据框行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54790780/

相关文章:

python - 如何验证您在 Azure 上是否有足够的资源

python - 使用 "pointer"更新 tkinter 小部件参数

python - argparse——可选参数需要 2 个值或没有

MySQL 在多个 UNION 后使用 GROUP BY

python - 基于 1 个条件的新列使用索引和一列 groupby

python - 在文件中存储带有函数调用的 f 字符串

python - Pandas 重采样 : forcing specific start time of time bars

python - 如何找到两个 Pandas DataFrame 之间的差异

python - 从字符串中删除最后四位数字 - 将 Zip+4 转换为邮政编码

python - 带有 Groupby 的 Pandas 滚动函数