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/