熊猫:如何以一对多和一对一的关系过滤参数

问题描述

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

一个数据框:

         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

因此,基本上为每个eventId的每个instanceId列出了每个红色,蓝色,时间,持续时间,值,statusId和finishType。我是Pandas的新手,所以我一直在研究各种功能,但是我总是遇到通常与数据类型(float vs str)相关的错误……

更新:从Edunne获得解决方案后,我意识到我认为对数据集更好的工作实际上是另外一回事。我宁愿向下合并每个“事件ID”的每个“实例ID”的“红色”值的行。不同的值将被平均,因此“持续时间”的平均值和“值”字段的平均值。看起来像这样:

          eventId instanceId  numRed ...  duration   value statusId finishType
0             841    153          2  ...     25.842   218.3        1   Positive
1             841    146          1  ...     24.986 217.586        1   Negative

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)