【发布时间】:2019-07-24 23:05:46
【问题描述】:
我正在尝试使用具有以下字段的 csv 根据收入计算一些月度业务指标:客户 ID、订阅开始、订阅持续时间和订阅价值。
由于我需要对过去几个月进行比较(例如,如果特定客户的收入减少了),我最初的想法是为每个月创建新列并基于这些列,使用 panda 来查找值并将它们存储在这些指标的新表中。
你们认为这是最好的方法还是最好尝试使用 SQL 来获取这些指标?
对不起,如果问题不清楚,cloudn找不到更好的解释方法。
【问题讨论】:
我正在尝试使用具有以下字段的 csv 根据收入计算一些月度业务指标:客户 ID、订阅开始、订阅持续时间和订阅价值。
由于我需要对过去几个月进行比较(例如,如果特定客户的收入减少了),我最初的想法是为每个月创建新列并基于这些列,使用 panda 来查找值并将它们存储在这些指标的新表中。
你们认为这是最好的方法还是最好尝试使用 SQL 来获取这些指标?
对不起,如果问题不清楚,cloudn找不到更好的解释方法。
【问题讨论】:
我不确定我是否完全理解您的问题,但看起来您需要一种方法来在客户价值的当前日期和过去日期之间进行迭代。
看看这段代码能不能帮到你:
# 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
【讨论】: