循环遍历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以查找具有相同索引值的的主要内容,如果未能解决你的问题,请参考以下文章
批处理文件以循环遍历文件夹并将文件夹和内容复制到具有相同文件夹名称的目录