我有一个带有双时间戳数据(生效日期和终止日期)的数据框,我想为数据中表示的每个实体生成一个嵌套字典(并最终生成一个新数据框),用于统计数据随时间的活动实例。例如,如果一个字段在1980年变得活跃,我希望1980年键中该公司键的值增加1。如果一个字段终止于1992,我希望1992键中该公司键的值减少1。
下面是一个数据示例:
ID CO_Num CO_Name Termination_Date Effective_Date
106072 84028 COMPANY A 7/1/04 4/9/69
106084 84028 COMPANY A 12/1/85 8/20/69
106094 84028 COMPANY A 12/1/70 10/3/69
106115 84028 COMPANY B 12/1/85 1/7/70
106133 91108 COMPANY B 2/4/86 3/6/70
106133 91108 COMPANY C NaT 3/6/91
106133 91108 COMPANY C NaT 3/6/91
我创建了一个嵌套字典,将年份作为顶部键,将公司/实例字典作为值,将所有公司值设置为0。例如
nest_dict = {2000: {'COMPANY A': 0, 'COMPANY B': 0}, 2001: {'COMPANY A': 0, 'COMPANY B': 0}}
然后,我尝试了几乎所有我能想到的方法来迭代数据框和/或字典以获得我想要的输出。这是我当前的迭代代码。
for key, value in nest_dict.items():
for data in df.values:
if data[4].year == key:
value[data[2]] += 1
if data[3].year == key:
value[data[2]] -= 1
当我将输出放入数据帧时,它看起来像这样:
| 1969 | 1970 | 1971 |
--------- | -------- | -------- | -------- |
Company A | 0 | 0 | 0 |
Company B | 0 | 0 | 0 |
Company C | 2 | 2 | 2 |
我想看到的是这样的:
| 1969 | 1970 | 1971 |
--------- | -------- | -------- | -------- |
Company A | 3 | 2 | 2 |
Company B | 0 | 2 | 2 |
Company C | 0 | 0 | 0 |
在本例中,每列是每个公司的活动实例的运行统计。相反,我得到的是每个公司都相同的终端值。
我觉得我在这里错过了一些非常简单的东西。如有任何帮助,不胜感激。
<代码>代码>
我明白了。我遇到的第一个问题是,我没有把公司每年的子词典都复印出来。有关这方面的更多信息,请参阅这篇文章
我的第二个问题是弄清楚如何利用我以前的迭代输出值
1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996
Company
COMPANY A 3 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
COMPANY B 0 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
COMPANY C 0 1 1 3 4 4 4 4 4 4 5 6 12 17 21 21 22 21 20 20 20 20 20 20 20 18 18 16 14 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
COMPANY D 0 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
COMPANY E 0 0 1 2 2 4 4 7 11 16 17 19 25 25 17 17 17 17 10 10 10 10 10 10 10 10 10 10 10 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
数值索引从数据帧行调用"有效日期"one_answers"终止日期"值,如果它读起来有点乱,请道歉。
这给了我想要的结果。
PP_8如果有人对如何做得更好/更有效有意见或建议,我将不胜感激。