Python Pandas-基于先前获得的子对象从数据帧中移除行

2024-05-15 19:09:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行已安装Pandas 0.11.0库的Python 2.7

我一直在寻找一个还没有找到答案的问题,所以我希望有人比我更有经验的解决方案。

假设我的数据在df1中如下所示:

df1=

  zip  x  y  access
  123  1  1    4
  123  1  1    6
  133  1  2    3
  145  2  2    3
  167  3  1    1
  167  3  1    2

例如,使用df2 = df1[df1['zip'] == 123],然后使用df2 = df2.join(df1[df1['zip'] == 133]),我得到以下数据子集:

df2=

 zip  x  y  access
 123  1  1    4
 123  1  1    6
 133  1  2    3

我想做的是:

1)从df1中删除行,因为它们是用df2定义/连接的

或者

2)创建df2后,删除行(差异?)由df1组成的df2

希望所有这些都有意义。如果需要更多信息,请告诉我。

编辑:

理想情况下,将创建第三个数据帧,如下所示:

df2=

 zip  x  y  access
 145  2  2    3
 167  3  1    1
 167  3  1    2

也就是说,从df1df2的所有内容都不在df2。谢谢!


Tags: 数据答案信息pandas定义access经验差异
1条回答
网友
1楼 · 发布于 2024-05-15 19:09:50

我想到了两个选择。首先,使用isin和掩码:

>>> df
   zip  x  y  access
0  123  1  1       4
1  123  1  1       6
2  133  1  2       3
3  145  2  2       3
4  167  3  1       1
5  167  3  1       2
>>> keep = [123, 133]
>>> df_yes = df[df['zip'].isin(keep)]
>>> df_no = df[~df['zip'].isin(keep)]
>>> df_yes
   zip  x  y  access
0  123  1  1       4
1  123  1  1       6
2  133  1  2       3
>>> df_no
   zip  x  y  access
3  145  2  2       3
4  167  3  1       1
5  167  3  1       2

其次,使用groupby

>>> grouped = df.groupby(df['zip'].isin(keep))

然后任何一个

>>> grouped.get_group(True)
   zip  x  y  access
0  123  1  1       4
1  123  1  1       6
2  133  1  2       3
>>> grouped.get_group(False)
   zip  x  y  access
3  145  2  2       3
4  167  3  1       1
5  167  3  1       2
>>> [g for k,g in list(grouped)]
[   zip  x  y  access
3  145  2  2       3
4  167  3  1       1
5  167  3  1       2,    zip  x  y  access
0  123  1  1       4
1  123  1  1       6
2  133  1  2       3]
>>> dict(list(grouped))
{False:    zip  x  y  access
3  145  2  2       3
4  167  3  1       1
5  167  3  1       2, True:    zip  x  y  access
0  123  1  1       4
1  123  1  1       6
2  133  1  2       3}
>>> dict(list(grouped)).values()
[   zip  x  y  access
3  145  2  2       3
4  167  3  1       1
5  167  3  1       2,    zip  x  y  access
0  123  1  1       4
1  123  1  1       6
2  133  1  2       3]

这在很大程度上取决于上下文,但我想你明白了。

相关问题 更多 >