根据三列将一个Pandas数据框中的行与另一个数据框中的行进行匹配

亚历克斯·MR

我有两个Pandas数据框,一个很大(30000+行),一个很小(100+行)。

dfA类似于:

      X     Y    ONSET_TIME    COLOUR 
0   104    78          1083         6    
1   172    78          1083        16
2   240    78          1083        15 
3   308    78          1083         8
4   376    78          1083         8
5   444    78          1083        14
6   512    78          1083        14
... ...   ...           ...       ...

dfB类似于:

    TIME     X     Y
0      7   512   350 
1   1722   512   214 
2   1906   376   214 
3   2095   376   146 
4   2234   308    78 
5   2406   172   146
...  ...   ...   ...  

我要为dfB中的每一行找到dfA中的行,其中X AND Y列的值相等,并且这是dfB ['TIME']的值大于dfA ['的第一行ONSET_TIME']并为此行返回dfA ['COLOUR']的值。

dfA表示显示器的刷新,其中X和Y是显示器上项目的坐标,因此对于每个不同的ONSET_TIME重复其自身(每个ONSET_TIME值有108对coodinates)。

将有多个行,两个数据帧中的X和Y相等,但是我也需要与时间匹配的行。

我已经使用for循环和if语句来完成此操作,只是为了看看可以完成该操作,但是显然,鉴于数据帧的大小,这需要很长时间。

for s in range(0, len(dfA)):
    for r in range(0, len(dfB)):
        if (dfB.iloc[r,1] == dfA.iloc[s,0]) and (dfB.iloc[r,2] == dfA.iloc[s,1]) and (dfA.iloc[s,2] <= dfB.iloc[r,0] < dfA.iloc[s+108,2]):
            return dfA.iloc[s,3]
飞行肉球

可能有一种更有效的方法来执行此操作,但是这里的方法没有那些慢的for循环:

import pandas as pd

dfB = pd.DataFrame({'X':[1,2,3],'Y':[1,2,3], 'Time':[10,20,30]})
dfA = pd.DataFrame({'X':[1,1,2,2,2,3],'Y':[1,1,2,2,2,3], 'ONSET_TIME':[5,7,9,16,22,28],'COLOR': ['Red','Blue','Blue','red','Green','Orange']})

#create one single table
mergeDf = pd.merge(dfA, dfB, left_on = ['X','Y'], right_on = ['X','Y'])
#remove rows where time is less than onset time
filteredDf = mergeDf[mergeDf['ONSET_TIME'] < mergeDf['Time']]
#take min time (closest to onset time)
groupedDf = filteredDf.groupby(['X','Y']).max()

print filteredDf

 COLOR  ONSET_TIME  X  Y  Time
0     Red           5  1  1    10
1    Blue           7  1  1    10
2    Blue           9  2  2    20
3     red          16  2  2    20
5  Orange          28  3  3    30


print groupedDf

COLOR  ONSET_TIME  Time
X Y                          
1 1     Red           7    10
2 2     red          16    20
3 3  Orange          28    30

基本思想是合并两个表,这样您就可以将一个表中的时间在一起。然后,我筛选了最大的记录(最接近dfB上的时间)。如果您对此有疑问,请告诉我。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据关键列值熊猫将一个数据框中的行与另一个数据框中的行匹配

来自分类Dev

根据选定的列过滤重复的行,并与Pandas中的另一个数据框进行比较

来自分类Dev

根据Pandas中的ID将列值从一个数据框复制到另一个数据框

来自分类Dev

Python根据另一个数据框中的列值匹配列名

来自分类Dev

Python根据另一个数据框中的列值匹配列名

来自分类Dev

根据与另一个数据框的(唯一)部分匹配,从数据框中删除行

来自分类Dev

根据另一个数据框中的值对一个数据框进行子集

来自分类Dev

根据另一个数据框中的信息对数据框进行分类

来自分类Dev

根据另一个数据框从数据框中设置子集/选择列

来自分类Dev

根据另一个数据框计算数据框中的列值

来自分类Dev

根据python中另一个数据框的2列过滤数据框

来自分类Dev

根据另一个数据框中的列删除行

来自分类Dev

根据另一个数据框中的匹配ID替换数据框列值

来自分类Dev

根据与另一个数据框的匹配在数据框中创建新列

来自分类Dev

根据Pandas中的一个公共列从另一个数据框更新多个列

来自分类Dev

根据匹配的值,使用另一个数据框中的值更新一个数据框中的列

来自分类Dev

根据另一个数据框中的值将列添加到数据框中

来自分类Dev

根据id列中的公共值从另一个数据框中减去数据框的行

来自分类Dev

从数据框中删除与另一个数据框R中的两列匹配的行

来自分类Dev

尝试将一个数据框中的值与另一个数据框中的值进行匹配(python)

来自分类Dev

根据另一个数据框中的匹配条件将列添加到R中的数据框中

来自分类Dev

根据另一个数据框的列对数据框列进行排序

来自分类Dev

根据另一个数据框中的名称的行索引将一个数据框中的名称转换为数字

来自分类Dev

根据另一个数据集中的列值在一个数据框中创建列

来自分类Dev

根据另一个数据框的行值在数据框中添加新列

来自分类Dev

根据另一数据框的行对一个数据框的列进行子集

来自分类Dev

R根据另一个数据框中的匹配名称替换同名

来自分类常见问题

在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

来自分类Dev

在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

Related 相关文章

  1. 1

    根据关键列值熊猫将一个数据框中的行与另一个数据框中的行匹配

  2. 2

    根据选定的列过滤重复的行,并与Pandas中的另一个数据框进行比较

  3. 3

    根据Pandas中的ID将列值从一个数据框复制到另一个数据框

  4. 4

    Python根据另一个数据框中的列值匹配列名

  5. 5

    Python根据另一个数据框中的列值匹配列名

  6. 6

    根据与另一个数据框的(唯一)部分匹配,从数据框中删除行

  7. 7

    根据另一个数据框中的值对一个数据框进行子集

  8. 8

    根据另一个数据框中的信息对数据框进行分类

  9. 9

    根据另一个数据框从数据框中设置子集/选择列

  10. 10

    根据另一个数据框计算数据框中的列值

  11. 11

    根据python中另一个数据框的2列过滤数据框

  12. 12

    根据另一个数据框中的列删除行

  13. 13

    根据另一个数据框中的匹配ID替换数据框列值

  14. 14

    根据与另一个数据框的匹配在数据框中创建新列

  15. 15

    根据Pandas中的一个公共列从另一个数据框更新多个列

  16. 16

    根据匹配的值,使用另一个数据框中的值更新一个数据框中的列

  17. 17

    根据另一个数据框中的值将列添加到数据框中

  18. 18

    根据id列中的公共值从另一个数据框中减去数据框的行

  19. 19

    从数据框中删除与另一个数据框R中的两列匹配的行

  20. 20

    尝试将一个数据框中的值与另一个数据框中的值进行匹配(python)

  21. 21

    根据另一个数据框中的匹配条件将列添加到R中的数据框中

  22. 22

    根据另一个数据框的列对数据框列进行排序

  23. 23

    根据另一个数据框中的名称的行索引将一个数据框中的名称转换为数字

  24. 24

    根据另一个数据集中的列值在一个数据框中创建列

  25. 25

    根据另一个数据框的行值在数据框中添加新列

  26. 26

    根据另一数据框的行对一个数据框的列进行子集

  27. 27

    R根据另一个数据框中的匹配名称替换同名

  28. 28

    在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

  29. 29

    在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

热门标签

归档