Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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/Pandas从数据帧中过滤出唯一的行_Python_Pandas - Fatal编程技术网

Python/Pandas从数据帧中过滤出唯一的行

Python/Pandas从数据帧中过滤出唯一的行,python,pandas,Python,Pandas,我有两个或三个重复行的数据帧 In [31]: df1 Out[31]: member time 0 0 2009-09-30 12:00:00 1 0 2009-09-30 18:00:00 2 0 2009-10-01 00:00:00 3 1 2009-09-30 12:00:00 4 1 2009-09-30 18:00:00 5 2 2009-09-30 12:00:00 6

我有两个或三个重复行的数据帧

In [31]: df1
Out[31]: 
    member           time
0       0 2009-09-30 12:00:00
1       0 2009-09-30 18:00:00
2       0 2009-10-01 00:00:00
3       1 2009-09-30 12:00:00
4       1 2009-09-30 18:00:00
5       2 2009-09-30 12:00:00
6       3 2009-09-30 12:00:00
...

In [32]: df2
Out[32]: 
    member           time
0       0 2009-09-30 12:00:00
1       0 2009-09-30 18:00:00
3       1 2009-09-30 12:00:00
4       2 2009-09-30 12:00:00
5       2 2009-09-30 18:00:00
6       2 2009-10-01 00:00:00
...
我想从df1和df2中筛选出具有唯一值'member'和'time'的行,并获得一个数据帧,该数据帧中只有在df1和df2中具有公共值'member'和'time'的行,即

In [33]: df_duplicated_1_and_2
Out[33]: 
    member           time
0       0 2009-09-30 12:00:00
1       0 2009-09-30 18:00:00
3       1 2009-09-30 12:00:00
4       2 2009-09-30 12:00:00
...
有没有一种高效、优雅的方法可以做到这一点

更新如果可能,我希望得到的不是新的合并数据帧,而是经过过滤的数据帧。e、 g

In [34]: df1
Out[34]: 
    member           time           value
0       0 2009-09-30 12:00:00  a
1       0 2009-09-30 18:00:00  b
2       0 2009-10-01 00:00:00  c
3       1 2009-09-30 12:00:00  d
4       1 2009-09-30 18:00:00  e
5       2 2009-09-30 12:00:00  f
6       3 2009-09-30 12:00:00  g
...

In [35]: df1_filtered_out
Out[35]: 
    member           time           value
0       0 2009-09-30 12:00:00  a
1       0 2009-09-30 18:00:00  b
3       1 2009-09-30 12:00:00  d
4       2 2009-09-30 12:00:00  g
...

并获取过滤后的df2。

成员
时间
列上进行内部联接:

>>> df1.merge(df2, on=['member', 'time'], how='inner')
   member                time
0       0 2009-09-30 12:00:00
1       0 2009-09-30 18:00:00
2       1 2009-09-30 12:00:00
3       2 2009-09-30 12:00:00
这将产生一个结果,即两个数据帧中只有具有相同
成员
时间
值的行

更新:

>>> df1.merge(df2[['member', 'time']])
   member                time value
0       0 2009-09-30 12:00:00     a
1       0 2009-09-30 18:00:00     b
2       1 2009-09-30 12:00:00     d
3       2 2009-09-30 12:00:00     f

默认情况下,合并是“内部”的,因此不需要
how
参数。@EdChum我知道,但我明确指定了
how
参数来显示OP如果他决定做不同的事情,他如何将此行为更改为
right
left
outer
。但是是的,这是一个有用的评论+1.感谢您的回答和评论。您的答案与我想做的几乎相同,但我希望得到“过滤”数据帧,而不是“合并”。你能告诉我怎样过滤掉重复的原料吗?(更新我的问题)@Tetsuro答案是一样的。只需从df2框架中选择列:
df1.merge(df2[['member','time']])
@Tetsuro同样,由于这是布尔索引,您无法获得视图,无论您做什么,都将获得副本。