<p>正在创建数据。请在问题中提供数据。:)</p>
<pre><code>startdate = pd.datetime(2019, 1, 1)
enddate = pd.datetime(2019, 3, 31)
df = pd.DataFrame(
data={
"ReportDate": [startdate, enddate, startdate, enddate, startdate, enddate],
"ClientId": [2, 1, 3, 3, 1, 2],
"ClientRevenue": [1432, 8493, 2316, 2145, 3211, 8763],
}
)
print(df)
ReportDate ClientId ClientRevenue
0 2019-01-01 2 1432
1 2019-03-31 1 8493
2 2019-01-01 3 2316
3 2019-03-31 3 2145
4 2019-01-01 1 3211
5 2019-03-31 2 8763
</code></pre>
<p>第一步是为startdate和enddate过滤df。你知道吗</p>
<pre><code>df = df.loc[((df['ReportDate']==startdate) | (df['ReportDate']==enddate)),:]
</code></pre>
<p>接下来,对数据帧进行排序,以便按日期顺序将客户机放在一起。你知道吗</p>
<pre><code>df = df.sort_values(['ClientId','ReportDate'])
ReportDate ClientId ClientRevenue
4 2019-01-01 1 3211
1 2019-03-31 1 8493
0 2019-01-01 2 1432
5 2019-03-31 2 8763
2 2019-01-01 3 2316
3 2019-03-31 3 2145
</code></pre>
<p>接下来,从enddate ClientRevenue中减去startdate ClientRevenue。如果值为正,则客户在这两个日期之间有增长。你知道吗</p>
<pre><code>result = df.groupby('ClientId').last() - df.groupby('ClientId').first()
print(result)
ReportDate ClientRevenue
ClientId
1 89 days 5282
2 89 days 7331
3 89 days -171
</code></pre>
<p>最后,过滤结果数据帧中的正'ClientRevenue',并将索引('ClientId')放到列表中。你知道吗</p>
<pre><code>print("ClientId with positive return: ", result[result['ClientRevenue']>0].index.tolist())
ClientId with positive return: [1, 2]
</code></pre>
<p><strong>编辑
我错过了关于客户下车的部分,但我回去测试了,它仍然有效。你知道吗</p>
<p>正在添加ClientId=0,但只有startdate。你知道吗</p>
<pre><code> ReportDate ClientId ClientRevenue
0 2019-01-01 0 1324
1 2019-01-01 2 1432
2 2019-03-31 1 8493
3 2019-01-01 3 2316
4 2019-03-31 3 2145
5 2019-01-01 1 3211
6 2019-03-31 2 8763
</code></pre>
<p>计算结果为:</p>
<pre><code> ReportDate ClientRevenue
ClientId
0 0 days 0
1 89 days 5282
2 89 days 7331
3 89 days -171
ClientId with positive return: [1, 2]
</code></pre>