data = {'date': ['1998', '2002','1999','2001','1998','2002'],
        'node1': [1,1,1,1,3,3],
     'node2': [5,3,3,2,4,4],
     'weight': [1,1,1,1,1,1], }
df = pd.DataFrame(data, columns = ['date', 'node1','node2','weight'])


基于两个日期范围(98-00和01-03),我想获得两个单独的数据框(每个日期范围一个),其中仅存在两个范围值中都存在的节点。
例如,在第一行中,node2:5仅出现在98-00范围内,而在01-03范围内不存在,因此我们排除所有具有5的行(可以在node1或node2列中)。 :2,它仅出现在01-02日期范围内,因此在两个数据框中都排除所有值为2的行。)

预期产量:

在一个数据帧中:node1 node2日期

               1       3      1999

               3       4       1998


第二个数据帧:node1 node2日期

                1       3      2001

                3       4      2002

最佳答案

您可以使用.between()过滤每个数据帧所需的行

df = df[df.duplicated(['node1','node2'],keep = False)]
df1 = df[df['date'].between('1998', '2000')]
df2 = df[df['date'].between('2001', '2003')]


df1

    date    node1   node2   weight
2   1999    1       3       1
4   1998    3       4       1


df2

    date    node1   node2   weight
1   2002    1       3       1
5   2002    3       4       1


如果date列为1998-02-12格式,请将其转换为datetime并使用.dt访问器获取年份。

import datetime as dt
df['date'] = pd.to_datetime(df['date'])
df1 = df[df['date'].dt.year.between(1998, 2000)]
df2 = df[df['date'].dt.year.between(2001, 2003)]

关于python - 根据时间戳中两列中的元素分隔行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46916839/

10-13 09:43