Python 分组柱的有效相交
我有一个名为Python 分组柱的有效相交,python,pandas,Python,Pandas,我有一个名为use的数据框,其中包含ID、Date、…列。每行都是唯一的,但每个ID都有许多行,每个日期有一个行ID ID Date Other_data 1 1-1-01 10 2 1-1-01 23 3 1-1-01 0 1 1-2-01 11 3 1-2-01 1 1 1-3-01 9 2 1-3-01 20 3 1-3-01 2 我还有一个唯一ID的列表,ids=use['ID']。删除重复的I
use
的数据框,其中包含ID、Date、…
列。每行都是唯一的,但每个ID都有许多行,每个日期有一个行ID
ID Date Other_data
1 1-1-01 10
2 1-1-01 23
3 1-1-01 0
1 1-2-01 11
3 1-2-01 1
1 1-3-01 9
2 1-3-01 20
3 1-3-01 2
我还有一个唯一ID的列表,ids=use['ID']。删除重复的ID
我想找到所有日期的交集,也就是说,只有每个ID都有数据的日期。这个玩具问题的最终结果应该是[1-1-01,1-3-01]
目前,我通过循环,通过ID
进行子集设置,并通过交叉口。粗略地说,它看起来是这样的:
dates = use['Date'].drop_duplicates()
for i in ids:
id_dates = use[(use['ID'] == i)]['Date'].values
dates = set(dates).intersection(id_dates)
这让我觉得效率极低。识别每个ID都有数据的日期的更有效方法是什么
非常感谢 使用
交叉表
,当值为0时,应为目标行。使用df.eq(0).any(1)
。找到它
df=pd.crosstab(use.ID,use.Date)
df
Out[856]:
Date 1-1-01 1-2-01 1-3-01
ID
1 1 1 1
2 1 0 1
3 1 1 1
查找每个日期的唯一ID,然后检查是否所有ID
gp = df.groupby('Date').ID.nunique()
gp[gp == df.ID.nunique()].index.tolist()
#['1-1-01', '1-3-01']
你能发布一个示例数据帧(a)吗?你能再解释一下吗?似乎可以在
1-1-01
处有5000个唯一ID,在1-2-01
处有不同的5000个,但是1-1-01
和1-2-01
都会出现,因为它们具有相同数量的唯一ID?我误解了吗?@namnnumbr是的。因为比较是与df.ID.nunique()
进行的,后者是整个数据帧中唯一ID的总数。因此,如果1-1-01
有5000个唯一ID,并且1-2-01
有5000个不同的唯一ID,df.ID.nunique()
将是10000(在我们的示例中,只有2天)我想我在上面说的每个日期都有唯一的ID是错的:1-1-01
有5000个ID,1-2-01
有5000个ID,其中df.ID.nunique()
是7500,这意味着1-1-01
有2500个ID,2500个重叠,和2500只适用于1-2-01
。在这种情况下,因为ID.nunique()
相等,所以1-1-01
和1-2-01
都会出现在日期列表中,即使ID中没有1:1的重叠?谢谢你的解释和耐心@哦,我明白了。。。您想要所有具有相同ID集的成对日期分组,而不管它们是否是完整的ID集?我正在寻找一组表示所有ID的日期-即,排除只有一些ID存在的日期。当我使用df.eq(0)。任何(1)
,我都会得到一个两列响应,第一列是我所有的ID,第二列是我所有的True。。。我错过了什么?谢谢你的洞察力@namnnumbr然后尝试使用任何(0)