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

我有几个表的数据集。一些字段重叠,但在某些表上它们可能具有一对多关系,而在其他表上它们可能具有一对一关系。我正在尝试创建一个新的数据框,我可以在其中获取与一个字段(一对一)关联的值以及与同一字段关联但在另一个表中(一对多)的值,并将它们全部列在新数据框(一对多)。


一个数据框:


         finishtId eventId instanceId  ...       value statusId finishType

0               1     18        1  ...           218.3        1   Positive

1               2     18        2  ...         217.586        1   Positive

2               3     18        3  ...         216.719        1   Positive

3               4     18        4  ...         215.464        1   Positive

4               5     18        5  ...         218.385        1   Negative

另一个数据框:


      eventId  instanceId red blue     time duration  milliseconds

0        841       153     1    1  17:05:23   26.898         26898

1        841        30     1    1  17:05:52   25.021         25021

2        841        17     1   11  17:20:48   23.426         23426

3        841         4     1   12  17:22:34   23.251         23251

4        841        13     1   13  17:24:10   23.842         23842

5.       841.      153.    2   45. 17:45:30.  24.786.        26473

     ...       ...   ...  ...       ...      ...           ...

7633    1036       822     2   48  16:20:38   22.143         22143

7634    1036         1     2   50  16:23:05   21.853         21853

7635    1036       849     2   49  16:24:00   22.475         22475

7636    1036       154     2   62  16:42:16   24.010         24010

7637    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 finishType

0             841    153        1       2   17  ... 17:05:23    26.898   218.3        1   Positive

1             841    153        2       2   52  ... 17:45:30    24.786 217.586        1   Positive

1             841    146        1       1   40  ... 17:32:30    24.986 217.586        1   Negative


猛跑小猪
浏览 78回答 1
1回答

慕哥9229398

你应该向我们展示你的尝试!让人们更容易回答。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 columnsnew_df2 = df2.groupby(group_by_columns).agg(agg_dict).reset_index()result = new_df2.merge(df1, on=["eventID", "instanceId"], how="outer")让我知道事情的后续!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python