python - 根据条件重复数据框行
问题描述
我正在寻找一种根据值条件插入重复行的方法。
输入数据集包含以周为单位的客户价格和价格有效期 - 'price_start_week'和'price_end_week'。
这个想法是通过添加一个带有实际周数的新列来扩展数据框,并根据有效周数重复这些行。
输入:
╔═══════════════╦══════════════════╦════════════════╦═════════════╗
║ customer_name ║ price_start_week ║ price_end_week ║ price_value ║
╠═══════════════╬══════════════════╬════════════════╬═════════════╣
║ A ║ 4 ║ 7 ║ 500 ║
║ B ║ 3 ║ 6 ║ 600 ║
║ C ║ 2 ║ 4 ║ 700 ║
╚═══════════════╩══════════════════╩════════════════╩═════════════╝
输出:
+---------------+------------------+----------------+-------------+-------------+
| customer_name | price_start_week | price_end_week | actual week | price_value |
+---------------+------------------+----------------+-------------+-------------+
| A | 4 | 7 | 4 | 500 |
| A | 4 | 7 | 5 | 500 |
| A | 4 | 7 | 6 | 500 |
| A | 4 | 7 | 7 | 500 |
| B | 3 | 6 | 3 | 600 |
| B | 3 | 6 | 4 | 600 |
| B | 3 | 6 | 5 | 600 |
| B | 3 | 6 | 6 | 600 |
| C | 2 | 2 | 4 | 700 |
| C | 2 | 3 | 4 | 700 |
| C | 2 | 4 | 4 | 700 |
+---------------+------------------+----------------+-------------+-------------+
最好的方法是什么?
我正在考虑应用功能,例如:
def repeat(a):
if (a['price_start_week']>a['price_end_week']):
return a['price_start_week']-a['price_end_week']
...
df['actual_week']=df.apply(repeat, axis=0)
解决方案
Index.repeat
按周之间的差异使用,然后GroupBy.cumcount
按组计数:
a = df['price_end_week'] - df['price_start_week'] + 1
df = df.loc[df.index.repeat(a)].reset_index(drop=True)
df['actual week'] = df.groupby('customer_name').cumcount() + df['price_start_week']
print (df)
customer_name price_start_week price_end_week price_value actual week
0 A 4 7 500 4
1 A 4 7 500 5
2 A 4 7 500 6
3 A 4 7 500 7
4 B 3 6 600 3
5 B 3 6 600 4
6 B 3 6 600 5
7 B 3 6 600 6
8 C 2 4 700 2
9 C 2 4 700 3
10 C 2 4 700 4
推荐阅读
- java - ImageButton 不起作用 Android Studio Java
- javascript - Next.js - 服务器上的样式化组件样式化中断
- json - 从 Shopify API 获取 line_items 到 Google 表格中
- akamai - 将 Akamai 属性导入 Pulumi 时输入验证失败
- android - 使用 API 30 通过 PDF.js 加载 PDF
- python - 试图迭代字典中的浮点数
- plot - 使用平滑选项绘制曲线的问题
- android - 如何在扩展属性上添加 lateinit var
- c++ - 将数据存储到数组中
- r - 给定最大因数的总公因数