【发布时间】:2018-03-04 20:28:03
【问题描述】:
import pandas as pd
data = {'date': ['1998-03-01', '2001-04-01','1998-06-01','2001-08-01','2001-05-03'],
'node1': [1, 1, 2,2,3],
'node2': [8,316,26,35,44],
'weight': [1,1,1,1,1], }
df = pd.DataFrame(data, columns = ['date', 'node1','node2','weight'])
print(df)
mask1 = (df['date'] > '1998-01-01 00:00:01') & (df['date'] <= '2000-01-01
00:00:01')
mask2 = (df['date'] > '2000-01-01 00:00:01') & (df['date'] <= '2003-01-01
00:00:01')
mask = pd.concat((mask1, mask2), axis=1)
slct = mask.all(axis=1)
print df.ix[slct]
以上是我的尝试。数据集(以上是玩具数据集)有4列,分别是node1,node2,weight,timestamp。我想创建两组具有以下条件的行:set1 应该具有时间戳在 98-00 年之间的行,并将 2 年设置为 00-02 年。
另外两个集合都应该在两个年份范围内(98-00 和 00-02)。
所以在上面的例子中,这两个集合应该是 {1,2} 和 {1,2}.3 应该被排除,因为它只出现在 00-02 范围内。 但我的答案是空的。 首先我做了 mask1 和 mask2 以获得满足各个范围的行,然后我将它们连接起来以找到两个条件的交集。
【问题讨论】:
-
你期望输出是什么?
-
在上述情况下,答案应为节点:{1,1,2,2}。应仅排除节点 1:{3}。
-
为什么排除 3 年份是 2001 na?
-
因为我需要98-00和00-02都出现过的节点。 3 仅在 00-02 范围内。
-
我明白了这个问题,现在请检查我的解决方案。
标签: python python-2.7 pandas dataframe