gpt4 book ai didi

python - 取 pandas 中两个时间戳范围条件的交集

转载 作者:行者123 更新时间:2023-11-30 22:29:26 28 4
gpt4 key购买 nike

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 年之间的行,set 2 应该包含 00-02 年之间的行。

此外,这两个集合都应包含年份范围(98-00 和 00-02)的行。

因此,在上面的示例中,两个集合应为 {1,2} 和 {1,2}。应排除 3,因为它仅出现在 00-02 范围内。但我的答案是空框。首先,我执行 mask1 和 mask2 来获取满足各个范围的行,然后将它们连接起来以找到两个条件的交集。

最佳答案

您可以将 groupby 与 isin 一起使用来了解日期包含 1998-2000 和 2000-2002,即使用基于 node1 的 groupby 的掩码,如下所示

df['date'] = pd.to_datetime(df['date'])
mask = df.groupby('node1').apply(lambda x : (x['date'].dt.year.isin([1998,1999,2000])).any())
mask2 = df.groupby('node1').apply(lambda x : (x['date'].dt.year.isin([2000,2001,2002])).any())

df[df['node1'].isin(mask[mask & mask2].index)] # Get the dataframe

说明:

maskmask2 将给出类似于

的掩码
mask                  mask2(node1                  node1 1     True           1    True 2     True           2    True 3    False           3    True dtype: bool,        dtype: bool)

Later we can use & to get the mask based on truth table, a new mask with only true values i.e

mask[mask & mask2] 
node11    True2    Truedtype: bool

Select the df based on the new mask i.e

df['node1'].isin(mask[mask & mask2].index)
0     True1     True2     True3     True4    FalseName: node1, dtype: bool

Output:

df[df['node1'].isin(mask[mask & mask2].index)]
        date  node1  node2  weight0 1998-03-01      1      8       11 2001-04-01      1    316       12 1998-06-01      2     26       13 2001-08-01      2     35       1

关于python - 取 pandas 中两个时间戳范围条件的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46378603/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com