Pandas Python dict,元组索引为缩进dict
我正在分析facebook上的一段对话,我想知道每个人每天每小时发送多少条信息。使用Pandas,我做了Pandas Python dict,元组索引为缩进dict,pandas,dataframe,dictionary,pandas-groupby,multi-index,Pandas,Dataframe,Dictionary,Pandas Groupby,Multi Index,我正在分析facebook上的一段对话,我想知道每个人每天每小时发送多少条信息。使用Pandas,我做了数据['n_msg_by_hour']=df.groupby(['author',df['date'].dt.hour])[''u id'].count()。返回的序列对象具有以下所需表单: Djézeune 0 4866 1 4549 2 4463
数据['n_msg_by_hour']=df.groupby(['author',df['date'].dt.hour])[''u id'].count()
。返回的序列对象具有以下所需表单:
Djézeune 0 4866
1 4549
2 4463
3 3841
4 2560
5 1029
6 396
7 239
8 76
9 56
10 40
11 88
12 340
13 685
14 1253
15 1712
16 2224
17 2650
18 2439
19 2951
20 3347
21 3575
22 4696
23 4741
Vinssan 0 108
1 129
2 84
3 72
4 8
5 17
6 4
7 1
8 1
9 1
11 4
12 26
13 37
14 81
15 114
16 92
17 123
18 83
19 95
20 58
21 112
22 87
23 109
Name: _id, dtype: int64
但是,当我执行数据['n_msg_by_hour']]时,对于dict()
我有一个以元组作为键的dict,如下所示:
{
('Djézeune', 0):4866,
('Djézeune', 1):4549,
('Djézeune', 10):40,
('Djézeune', 11):88,
('Djézeune', 12):340,
('Djézeune', 13):685,
('Djézeune', 14):1253,
...
('Vinssan', 0):108,
('Vinssan', 1):129,
('Vinssan', 10):0,
('Vinssan', 11):4,
('Vinssan', 12):26,
('Vinssan', 13):37,
('Vinssan', 14):81,
}
{_id : 5d9e716e5a20777bdb1b22f5,
author : "Djézeune",
timestamp : 1568670904454,
date : 2019-09-16T17:55:04.000+00:00,
type : "Generic",
content : "Hello"}
但我希望有一个缩进的dict,然后将其放在json中
{
'Djézeune':{0:4866, 1:4549, 10:40, 11:88, 12:340, 13:685, 14:1253 ...},
'Vinssan':{0:108, 1:129, 10:0, 11:4, 12:26, 13:37, 14:81 ...}
}
使用groupby
的level
选项或pandas
中的函数(如multi-index
)是否有一种简单的方法来完成此操作,而不是重复我的dict键
我的数据框中的每一行如下所示:
{
('Djézeune', 0):4866,
('Djézeune', 1):4549,
('Djézeune', 10):40,
('Djézeune', 11):88,
('Djézeune', 12):340,
('Djézeune', 13):685,
('Djézeune', 14):1253,
...
('Vinssan', 0):108,
('Vinssan', 1):129,
('Vinssan', 10):0,
('Vinssan', 11):4,
('Vinssan', 12):26,
('Vinssan', 13):37,
('Vinssan', 14):81,
}
{_id : 5d9e716e5a20777bdb1b22f5,
author : "Djézeune",
timestamp : 1568670904454,
date : 2019-09-16T17:55:04.000+00:00,
type : "Generic",
content : "Hello"}
通过按索引的第一级分组并迭代生成的
系列
es,可能最容易实现:
In [320]: s = pd.Series(np.random.random(48), index=pd.MultiIndex.from_product([["DJ", "Vin"], range(24)]))
In [321]: d = {k: v.droplevel(0).to_dict() for k, v in s.groupby(level=0)}
In [322]: d
Out[322]:
{'DJ': {0: 0.8731657595223525,
1: 0.6806768452816228,
2: 0.6376297431476246,
...
23: 0.9995968607512785},
'Vin': {0: 0.19255930821536904,
1: 0.944802244484905,
2: 0.1171672201795304,
...
23: 0.7387196132363647}}