回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有以下交易记录。日期格式为年/月/日</p>
<pre><code>print(df)
customer_id shop date_of_transaction
0 John McDonalds 2020-02-03
1 John McDonalds 2020-02-04
2 John McDonalds 2020-02-05
3 John KFC 2020-02-06
4 John KFC 2020-02-07
5 John KFC 2020-02-08
6 Mary McDonalds 2020-02-09
7 Mary McDonalds 2020-02-10
8 Mary McDonalds 2020-02-11
9 Mary KFC 2020-02-12
10 Mary KFC 2020-02-13
11 Joe KFC 2020-02-14
12 Joe McDonalds 2020-02-15
13 Joe McDonalds 2020-02-16
14 Joe McDonalds 2020-02-17
15 Joe KFC 2020-02-18
16 Joe KFC 2020-02-19
17 Joe KFC 2020-02-20
18 Joe MCDonalds 2020-02-21
</code></pre>
<p>我想得到每家商店的平均交易频率</p>
<p>例如,Joe在2月15日到2月21日之间去了4次麦当劳。这是他第一次和最后一次交易之间的6天。所以他每1.5天去一次麦当劳</p>
<p>我想用这个信息创建一个新的数据框。所以我试着这样做:</p>
<pre><code>df.groupby(['customer_id','shop'])['date_of_transaction'].apply(lambda x: (max(x) - min (x))/len(x))
customer_id shop
Joe KFC 1 days 12:00:00
McDonalds 1 days 12:00:00
John KFC 0 days 16:00:00
McDonalds 0 days 16:00:00
Mary KFC 0 days 12:00:00
McDonalds 0 days 16:00:00
</code></pre>
<p>Joe在麦当劳的平均频率是<code>1 days</code>。应该是1.5天</p>
<p>如果我删除该部门,我们将得到:</p>
<pre><code>df.groupby(['customer_id','shop'])['date_of_transaction'].apply(lambda x:(max(x) - min (x)))
customer_id shop
Joe KFC 6 days
McDonalds 6 days
John KFC 2 days
McDonalds 2 days
Mary KFC 1 days
McDonalds 2 days
</code></pre>
<p>只是当我试着将它除以每个商店里每个人的访问次数时,它不起作用</p>
<p>我曾尝试将<code>astype(int)</code>添加到<code>(max(x) - min (x))</code>中,但没有效果。我知道timedelta对象有问题,但我无法将其转换为int。我还向timedelta对象添加了<code>.dt.days</code>,但运气不好</p>
<p>理想情况下,我希望以这样的数据帧结束(注意-频率数字由以下部分组成):</p>
<pre><code> customer_id McDonalds Frequency KFC Frequency
0 John 1 2
1 Mary 3 4
2 Joe 5 6
</code></pre>
<p>我的练习是df。如果加载df,可以使用<code>dayfirst</code>转换日期:</p>
<p><code>df['date_of_transaction'] = pd.to_datetime(df['date_of_transaction'],dayfirst=True)</code></p>
<pre><code>
df.to_dict()
{'customer_id': {0: 'John', 1: 'John', 2: 'John', 3: 'John', 4: 'John', 5: 'John', 6: 'Mary', 7: 'Mary', 8: 'Mary', 9: 'Mary', 10: 'Mary', 11: 'Joe', 12: 'Joe', 13: 'Joe', 14: 'Joe', 15: 'Joe', 16: 'Joe', 17: 'Joe', 18: 'Joe'}, 'shop': {0: 'McDonalds', 1: 'McDonalds', 2: 'McDonalds', 3: 'KFC', 4: 'KFC', 5: 'KFC', 6: 'McDonalds', 7: 'McDonalds', 8: 'McDonalds', 9: 'KFC', 10: 'KFC', 11: 'KFC', 12: 'McDonalds', 13: 'McDonalds', 14: 'McDonalds', 15: 'KFC', 16: 'KFC', 17: 'KFC', 18: 'McDonalds'}, 'date_of_transaction': {0: Timestamp('2020-02-03 00:00:00'), 1: Timestamp('2020-02-04 00:00:00'), 2: Timestamp('2020-02-05 00:00:00'), 3: Timestamp('2020-02-06 00:00:00'), 4: Timestamp('2020-02-07 00:00:00'), 5: Timestamp('2020-02-08 00:00:00'), 6: Timestamp('2020-02-09 00:00:00'), 7: Timestamp('2020-02-10 00:00:00'), 8: Timestamp('2020-02-11 00:00:00'), 9: Timestamp('2020-02-12 00:00:00'), 10: Timestamp('2020-02-13 00:00:00'), 11: Timestamp('2020-02-14 00:00:00'), 12: Timestamp('2020-02-15 00:00:00'), 13: Timestamp('2020-02-16 00:00:00'), 14: Timestamp('2020-02-17 00:00:00'), 15: Timestamp('2020-02-18 00:00:00'), 16: Timestamp('2020-02-19 00:00:00'), 17: Timestamp('2020-02-20 00:00:00'), 18: Timestamp('2020-02-21 00:00:00')}}
</code></pre>