使用索引将系列扩展到更大的数据框?

Posted

技术标签:

【中文标题】使用索引将系列扩展到更大的数据框?【英文标题】:Expand a series to a larger dataframe using the index? 【发布时间】:2020-11-27 05:07:03 【问题描述】:

df1 是一个数据集,其中包含每个时期每个月的 CHU 平均值。 (总计 400 个值)

Station Name    Period  Month   CHU
BEAVERLODGE         1   1       1.79704898931554
BEAVERLODGE         1   2       0.1680085712099234
BEAVERLODGE         1   3       4.112437412852452
BEAVERLODGE         1   4       45.52884011661426
BEAVERLODGE         1   5       59.00708544329818
BEAVERLODGE         1   6       55.99191752540373
BEAVERLODGE         1   7       42.66769521104078
BEAVERLODGE         1   8       57.23306311568642
BEAVERLODGE         1   9       78.227061891039
BEAVERLODGE         1   10      47.404451708509015

df2 是一个更大的数据集,其中包含每个月、年、期的每个 CHU 值。 (总计 9000 个值)

Station Name    Period  Month   Year    CHU
BEAVERLODGE        1       1    1931    3.997620000000001
BEAVERLODGE        1       1    1943    1.6936199999999983
BEAVERLODGE        1       1    1945    0.45671999999999846
BEAVERLODGE        1       2    1938    10.523399999999997
BEAVERLODGE        1       2    1954    10.285799999999998
BEAVERLODGE        1       3    1930    11.470499999999998
BEAVERLODGE        1       3    1934    7.443599999999996
BEAVERLODGE        1       3    1937    4.80618
BEAVERLODGE        1       3    1939    0.9967199999999985
BEAVERLODGE        1       3    1941    0.8707200000000004
BEAVERLODGE        1       3    1942    2.25

例如,在 Beaverlodge 第 3 个月的每一行中,我希望 I 列带有 4.11 。等等.. 非常感谢任何帮助。

【问题讨论】:

@Tom 的回答是否满足您的需求?因为如果不是,则不清楚您要的是什么。您是要更改 df2 中的值,还是要创建一个全新的数据框?提供所需的输出会很有帮助。 @elPastor 数据集中有不同的站点和时期,每个月都有不同的 CHU 平均值(df1 的 CHU 列),我需要将它们放在 CHU 的各个月值旁边的列中df2. @Tom 谢谢!我收到错误“InvalidIndexError:重新索引仅对具有唯一值的索引对象有效”。在系列 1 中,索引是这样的 (1.0, 1.0, 'BEAVERLODGE'),但在系列二中 (1, 1, 'BEAVERLODGE')。我还想保留原来的 CHU 专栏,并为 CHUmean 增加一个新的专栏。 【参考方案1】:

您可以使用map 执行以下操作:

s1 = df1['CHU']
s1.index = zip(df1['Period'], df1['Month'])
s2 = pd.Series(zip(df2['Period'], df2['Month']))
df2['CHU'] = s2.map(s1)

df2捐款:

   Station_Name  Period  Month  Year       CHU
0   BEAVERLODGE       1      1  1931  1.797049
1   BEAVERLODGE       1      1  1943  1.797049
2   BEAVERLODGE       1      1  1945  1.797049
3   BEAVERLODGE       1      2  1938  0.168009
4   BEAVERLODGE       1      2  1954  0.168009
5   BEAVERLODGE       1      3  1930  4.112437
6   BEAVERLODGE       1      3  1934  4.112437
7   BEAVERLODGE       1      3  1937  4.112437
8   BEAVERLODGE       1      3  1939  4.112437
9   BEAVERLODGE       1      3  1941  4.112437
10  BEAVERLODGE       1      3  1942  4.112437

解释:您基于df1 创建了一个系列s1,以(Period, Month) paris 作为索引,CHU 作为值。您还可以基于 df2 创建一个系列 s2,并将 (Period, Month) 对作为值。然后map 使用来自s2 的值通过s1“查找”所需的CHU 值。

我同时使用PeriodMonth,因为我假设您尝试使用多个Period 重新分配值。如果不是这种情况,您可以在不使用该列的情况下执行类似的方法。

【讨论】:

以上是关于使用索引将系列扩展到更大的数据框?的主要内容,如果未能解决你的问题,请参考以下文章

ios 8 如何让整个应用伸展到更大的屏幕而不是自动布局

Javascript - 链接到更大数组的值数组

在 pandas 扩展/滚动功能中,如何使用数据框或系列的索引?

使用 Pandas 嵌套 JSON

根据重叠目标将多个索引折叠成组

将包含 JSON 对象的数据框展开为更大的数据框