gpt4 book ai didi

python - 如何为 DataFrame 中的每一行聚合来自 ID 匹配的其他 N 个 DataFrame(在特定列上)的数据

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:00 27 4
gpt4 key购买 nike

我正在尝试聚合来自多个 Pandas DataFrame 的数据以对其进行分析。

我有一个包含播放器信息的主 DataFrame,例如:

Master
Id FullName TwitterHandle
0 1 John Smith a
1 2 Ray Duke b
2 3 Max Welby c

此外,我还有 14 个包含不同统计源的 DataFrame。每次运行的源数量都会波动,因此最好不要硬编码例如这并不理想。

Master["Mean_Hits"] = (source1["Hits"] + source2["Hits"] + ... + sourceN["Hits"]) / N

他们的数据源都有相同的球员,但预测不同。此表中的 Id 对应于主 DataFrame 中的 Id。主数据框包含的玩家比数据源多得多,理想情况下,不匹配项只会被清零而不是被删除。

例如数据源

source1
Id Hits RBIs
0 1 50 10
1 2 100 25
2 3 22 3

source2
Id Hits RBIs
0 1 40 12
1 2 75 20
2 3 33 6

我想将每个来源的每一列聚合成一个平均值,并将该列添加到主数据框中。因此,它会从 N 个 DataFrame 聚合 Hits 并除以 N,然后更新主 DataFrame,所以现在是:

期望的输出:

   Id    FullName OtherPersonalInfo            Mean_Hits            Mean_RBIs
0 1 John Smith a 45.00 11.00
1 2 Ray Duke b 87.50 22.50
2 3 Max Welby c 27.50 4.50

我会为每个“stat”列执行此操作,并且在所有这些列上采用原始列名称并在其前面加上“Mean_”。

显然,我可以通过遍历主 DataFrame 中的行并选择每个源中的匹配行来提取值来非常缓慢地完成此操作。

我知道这在 pandas 中并不少见,所以一定有更好的方法。

创建数据源基本示例的代码:

    import pandas as pd
master_table_dict = {
"Id": [1, 2, 3],
"FullName": ["John Smith", "Ray Duke", "Max Welby"],
"OtherPersonalInfo": ["a", "b", "c"],
}
data_source_one_dict = {"Id": [1, 2, 3], "Hits": [50, 100, 22], "RBIs": [10, 25, 3]}
data_source_two_dict = {"Id": [1, 2, 3], "Hits": [40, 75, 33], "RBIs": [12, 20, 6]}
master = pd.DataFrame.from_dict(master_table_dict)
sources = {
"source1": pd.DataFrame.from_dict(data_source_one_dict),
"source2": pd.DataFrame.from_dict(data_source_two_dict),
}

最佳答案

IIUC,你可以在 Idconcat 和 groupby,在 Idmerge:

d=pd.concat(sources.values(),ignore_index=True).groupby('Id',as_index=False).mean()
master.merge(d,on='Id')

   Id    FullName OtherPersonalInfo  Hits  RBIs
0 1 John Smith a 45.0 11.0
1 2 Ray Duke b 87.5 22.5
2 3 Max Welby c 27.5 4.5

关于python - 如何为 DataFrame 中的每一行聚合来自 ID 匹配的其他 N 个 DataFrame(在特定列上)的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57530100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com