python - 使用 Pandas 或 SQL 根据订阅时长计算收入?
问题描述
我正在尝试使用具有以下字段的 csv 根据收入计算一些月度业务指标:客户 ID、订阅开始、订阅持续时间和订阅价值。
由于我需要对过去几个月进行比较(例如,如果特定客户的收入减少了),我最初的想法是为每个月创建新列并基于这些列,使用 panda 来查找值和将它们存储在这些指标的新表中。
你们认为这是最好的方法还是最好尝试使用 SQL 来获取这些指标?
抱歉,如果问题不清楚,云找不到更好的解释方法。
解决方案
我不确定我是否完全理解您的问题,但看起来您需要一种方法来在客户价值的当前日期和过去日期之间进行迭代。
看看这段代码是否可以帮助你:
# example DataFrame
df = pd.DataFrame({'date':[1,2,3,1,2,3],
'client':['c1', 'c1', 'c1', 'c2', 'c2', 'c2'],
'value':[123, 234, 123, 456, 345, 678]})
# Set index to access items faster
df.set_index(['client', 'date'], inplace=True)
# iteract each item
delta = []
for client in df.index.levels[0]:
for date in df.index.levels[1]:
# if the item do not exist on index, nothing happens
try:
current = df.loc[client].loc[date]['value']
# if there isnt past date, delta is zero, but uou can change it
try:
before = df.loc[client].loc[date-1]['value']
delta.append(current - before)
except:
delta.append(0)
except:
pass
df['delta'] = delta
df
推荐阅读
- kubernetes - 由于 crashloopback,Pod 被终止
- azure - 是否可以依次启动各种 iot-edge 模块?如果是这样,该怎么做?
- .net - DDD 重复域逻辑
- java - 为什么 HBase2.0.0 中的 HRegionServer 会崩溃?
- amazon-web-services - 是否有用于读取文件而不是下载文件的 AWS S3 Go API?
- ios - 在我的证书中创建 ios 签名证书
- laravel - 如何从另一个表中获取所有用户数据并将它们包含在 laravel 的用户列表中?
- reactjs - React Material UI 与 React 15.4.1 版本的兼容性
- python-3.x - 比较两个熊猫数据框并根据条件更新一个数据框的最有效方法
- flutter - 颤动的网络数据表滚动 - 可怕的性能