循环遍历Series以查找具有相同索引值的

Posted

技术标签:

【中文标题】循环遍历Series以查找具有相同索引值的【英文标题】:Loop through Series to find which have the same index value 【发布时间】:2021-10-04 03:46:24 【问题描述】:

我想将我的 pandas 系列连接/合并在一起。这是我的数据结构(更多信息)

dictionary =  'a':'1','2','3','4', 'b':'1','2','3','4' 

两个级别都有更多的值,每个数字对应一个包含时间序列数据的序列。我想将所有“a”合并到一个数据框中,唯一的问题是有些数据是每年,有些是季度,有些是每月。

所以我要做的是遍历我的数据,如下所示:

for level1 in dictData:
     for level2 in dictData[level1]:
         dictData[level1][level2].index.equals(dictData[level1][level2])

但显然在这里我只是将这个系列与它本身进行比较!我如何将每个元素与所有其他元素进行比较?我知道我错过了一些相当基本的东西。谢谢。

编辑:

以下是一些实际数据示例:

'noT10101': 'A191RL':             Gross domestic product
1947-01-01                    -1.1
1947-04-01                    -1.0
1947-07-01                    -0.8
1947-10-01                     6.4
1948-01-01                     4.1
...                            ...
2020-01-01                    -5.0
2020-04-01                   -31.4
2020-07-01                    33.4
2020-10-01                     4.3
2021-01-01                     6.4

[370 rows x 1 columns], 'DGDSRL':             Goods
1947-01-01    2.9
1947-04-01    7.4
1947-07-01    2.7
1947-10-01    1.5
1948-01-01    2.0
...           ...
2020-01-01    0.1
2020-04-01  -10.8
2020-07-01   47.2
2020-10-01   -1.4
2021-01-01   26.6

[370 rows x 1 columns], 'A191RP':             Gross domestic product, current dollars
1947-01-01                                      9.7
1947-04-01                                      4.7
1947-07-01                                      6.0
1947-10-01                                     17.3
1948-01-01                                     10.0
...                                             ...
2020-01-01                                     -3.4
2020-04-01                                    -32.8
2020-07-01                                     38.3
2020-10-01                                      6.3
2021-01-01                                     11.0

[370 rows x 1 columns], 'DSERRL':             Services
1947-01-01       0.4
1947-04-01       5.9
1947-07-01      -0.8
1947-10-01      -2.1
1948-01-01       2.7
...              ...
2020-01-01      -9.8
2020-04-01     -41.8
2020-07-01      38.0
2020-10-01       4.3
2021-01-01       4.2

[370 rows x 1 columns], 

如您所见,字典键 'not10101' 对应一系列键 'A191RL'、'DGDSRL'、'A191RP' 等,其关联值为一个 Series。因此,当我访问 .index 时,我正在查看该系列的索引,即日期时间值。在此示例中,它们都匹配,但在某些情况下它们不匹配。

【问题讨论】:

您好,欢迎来到 SO!我对你的例子有点困惑。例如,您正在遍历字典但尝试访问 index 属性。这些数字应该是您真实数据中的数据框,是吗? @HemersonTacon 感谢您的回答和评论,请检查我的编辑 我也更新了我的答案。我仍然建议使用相同的方法。如果我正确理解您的问题,它应该适用于您的数据。 【参考方案1】:

您可以使用 pandas 的 concat 函数。应该是这样的:

import pandas as pd
import numpy as np

df1 = pd.Series(np.random.random_sample(size=5), 
                index=pd.Timestamp("2021-01-01") + np.arange(5) * pd.Timedelta(days=365),
                dtype=float)
df2 = pd.Series(np.random.random_sample(size=12), 
                index=pd.Timestamp("2021-01-15") + np.arange(12) * pd.Timedelta(days=30),
                dtype=float)
dictData= "a": "series": df, "same_series": df, "b": "series":df, "different_series": df2
new_dict = 
for level1 in dictData:
    new_dict[level1] = pd.concat(list(dictData[level1].values()))

请注意,我尝试模拟年度和每月粒度。我想说的是,串联的系列的粒度无关紧要。 结果将是这样的:

'a': 2021-01-01    0.213574
 2022-01-01    0.263514
 2023-01-01    0.627435
 2024-01-01    0.388753
 2024-12-31    0.990316
 2021-01-01    0.213574
 2022-01-01    0.263514
 2023-01-01    0.627435
 2024-01-01    0.388753
 2024-12-31    0.990316
 dtype: float64,
 'b': 2021-01-01    0.213574
 2022-01-01    0.263514
 2023-01-01    0.627435
 2024-01-01    0.388753
 2024-12-31    0.990316
 2021-05-01    0.614485
 2021-05-31    0.611967
 2021-06-30    0.820435
 2021-07-30    0.839613
 2021-08-29    0.507669
 2021-09-28    0.471049
 2021-10-28    0.550482
 2021-11-27    0.723789
 2021-12-27    0.209169
 2022-01-26    0.664584
 2022-02-25    0.901832
 2022-03-27    0.946750
 dtype: float64

查看文档:https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

【讨论】:

我已按照您的建议进行操作,并在我的连接数据框中收到了许多 NaN 值和重复的日期条目。您的建议仍然很有帮助,因为我肯定离我的解决方案更近了一步,一旦我解决了这个问题,我会在今天晚些时候更新。

以上是关于循环遍历Series以查找具有相同索引值的的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历索引和上一项

批处理文件以循环遍历文件夹并将文件夹和内容复制到具有相同文件夹名称的目录

遍历隐藏那些不包含数组中列出的值的行

批处理文件一次检索一行,然后循环遍历文件目录以查找每行的匹配项

函数不会遍历数组的所有索引[重复]

循环遍历数组以获取项目的索引 - swift