Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 分组柱的有效相交_Python_Pandas - Fatal编程技术网

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)