我正在尝试解压包含具有值列表的列的数据集。每个列表中的第一个位置表示在“日期”列中的日期进行的测量。下一个位置是前一天进行的测量,依此类推(最多 30 天)。这些列表的长度并不相同,但 count_users 中的列表长度将等于 count_samples 中的长度。
目标是获取数据,使得每个名称每个日期有 1 行,每行中对 count_users 和 count_samples 进行单个测量。
换句话说,数组的位置需要映射到特定的一天,并且每个名称的测量值应该每天求和。
原始数据如下所示:
Name Date count_users count_samples
A 2017-10-20 [0,0,1,2,2,4] [1,2,1,1,1,3]
A 2017-10-18 [5,2,0,0,0,0] [1,2,1,1,1,3]
B 2017-11-24 [0,0,0,0,4] [1,1,1,1,3]
C 2017-09-02 [] []
D 2017-10-30 [0,0,2,4] [1,2,1,1]
结果应该如下所示:
Name Date count_users count_samples
A 2017-10-20 0 1
A 2017-10-19 0 2
A 2017-10-18 6 2
A 2017-10-17 4 3
A 2017-10-16 2 2
A 2017-10-15 4 4
A 2017-10-14 0 1
A 2017-10-13 0 3
谁能推荐一个解决方案吗?
更新字典式数据:
{'Date': {0: Timestamp('2017-10-20 00:00:00'),
1: Timestamp('2017-10-18 00:00:00'),
2: Timestamp('2017-11-24 00:00:00'),
3: Timestamp('2017-09-02 00:00:00'),
4: Timestamp('2017-10-30 00:00:00')},
'Name': {0: 'A', 1: 'A', 2: 'B', 3: 'C', 4: 'D'},
'count_samples': {0: [1, 2, 1, 1, 1, 3],
1: [1, 2, 1, 1, 1, 3],
2: [1, 1, 1, 1, 3],
3: [],
4: [1, 2, 1, 1]},
'count_users': {0: [0, 0, 1, 2, 2, 4],
1: [5, 2, 0, 0, 0, 0],
2: [0, 0, 0, 0, 4],
3: [],
4: [0, 0, 2, 4]}}
最佳答案
有点难拿到
New_df=pd.DataFrame({'Date':np.concatenate(np.array([pd.date_range(end=x,periods=y,freq='D')[::-1] for x,y in zip(df.Date,df.count_samples.apply(len))])),
'Name':df.Name.repeat(df.count_samples.apply(len)),
'count_samples':np.concatenate(df.count_samples.values),
'count_users':np.concatenate(df.count_users.values)})
New_df.groupby(['Name','Date'],as_index=False).sum().sort_values(['Name','Date'],ascending=[True,False])
Out[458]:
Name Date count_samples count_users
7 A 2017-10-20 1.0 0.0
6 A 2017-10-19 2.0 0.0
5 A 2017-10-18 2.0 6.0
4 A 2017-10-17 3.0 4.0
3 A 2017-10-16 2.0 2.0
2 A 2017-10-15 4.0 4.0
1 A 2017-10-14 1.0 0.0
0 A 2017-10-13 3.0 0.0
12 B 2017-11-24 1.0 0.0
11 B 2017-11-23 1.0 0.0
10 B 2017-11-22 1.0 0.0
9 B 2017-11-21 1.0 0.0
8 B 2017-11-20 3.0 4.0
16 D 2017-10-30 1.0 0.0
15 D 2017-10-29 2.0 0.0
14 D 2017-10-28 1.0 2.0
13 D 2017-10-27 1.0 4.0
关于python - 使用 Pandas 将列表列扩展为值和天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48101560/