为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas:如何过滤具有一对多和一对一关系的参数

Pandas:如何过滤具有一对多和一对一关系的参数

猛跑小猪 2023-06-13 14:53:01
我有几个表的数据集。一些字段重叠,但在某些表上它们可能具有一对多关系,而在其他表上它们可能具有一对一关系。我正在尝试创建一个新的数据框,我可以在其中获取与一个字段(一对一)关联的值以及与同一字段关联但在另一个表中(一对多)的值,并将它们全部列在新数据框(一对多)。一个数据框:         finishtId eventId instanceId  ...       value statusId finishType0               1     18        1  ...           218.3        1   Positive1               2     18        2  ...         217.586        1   Positive2               3     18        3  ...         216.719        1   Positive3               4     18        4  ...         215.464        1   Positive4               5     18        5  ...         218.385        1   Negative另一个数据框:      eventId  instanceId red blue     time duration  milliseconds0        841       153     1    1  17:05:23   26.898         268981        841        30     1    1  17:05:52   25.021         250212        841        17     1   11  17:20:48   23.426         234263        841         4     1   12  17:22:34   23.251         232514        841        13     1   13  17:24:10   23.842         238425.       841.      153.    2   45. 17:45:30.  24.786.        26473     ...       ...   ...  ...       ...      ...           ...7633    1036       822     2   48  16:20:38   22.143         221437634    1036         1     2   50  16:23:05   21.853         218537635    1036       849     2   49  16:24:00   22.475         224757636    1036       154     2   62  16:42:16   24.010         240107637    1036       822     3   64  16:42:47   22.607         22607我想创建一个新的数据框,将 dataframe2 中的所有值(红色、蓝色、时间、持续时间、毫秒)附加到 instanceId 和 eventId 字段,以便 dataframe1 显示一对多关系。我还想创建一个新字段,告诉我每个 instanceId 和 eventId (numRed) 有多少红色 基本上是这样的:          eventId instanceId  red  numRed blue  ...     time  duration   value statusId finishType0             841    153        1       2   17  ... 17:05:23    26.898   218.3        1   Positive1             841    153        2       2   52  ... 17:45:30    24.786 217.586        1   Positive1             841    146        1       1   40  ... 17:32:30    24.986 217.586        1   Negative
查看完整描述

1 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

你应该向我们展示你的尝试!让人们更容易回答。

Pandas Merge是我处理它的方式。就像是:

new_df = df2.merge(df1, on=["eventID", "instanceId"], how="outer")

new_df 将包含 df2 中的所有行以及 df2 中的任何匹配行。

如果“eventID”或“instanceId”的数据类型在两个数据帧中不同,您可能会遇到问题,但这应该很容易解决......

编辑 可能正在寻找group_by。在加入/合并另一个数据帧之前,您应该在第二个数据帧上执行聚合。

# Dictionary with keys as column names and values as the aggregation/summary method.

agg_dict = {

    "duration": "mean",

    "value": "mean"

}

group_by_columns = ["eventID", "instanceId"] # We'll get one row in output for each combination of these columns

new_df2 = df2.groupby(group_by_columns).agg(agg_dict).reset_index()


result = new_df2.merge(df1, on=["eventID", "instanceId"], how="outer")

让我知道事情的后续!


查看完整回答
反对 回复 2023-06-13
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信