2016-04-28 83 views
3

假设我想要删除其标题包含'X'的列中包含单词'acme'的任何单元格的行。我目前的想法是添加一个for循环(对于包含X的列标题),然后使用先前定义的蒙版来删除'acme'行。有没有更好的办法?在包含'X'的列中,检查并删除包含'Y'的行

此外,一些帮助面具/查询将不胜感激,因为我从来没有使用过它们。

输入DF:

Company_x First Name Last Name Emails_x Created_x Hosted Meetings 03112016 Facilitated Meetings_x Attended Meetings_x Company_y Emails_y ... Created_x Hosted Meetings 04122016 Facilitated Meetings_x Attended Meetings_x Company_y Emails_y Created_y Hosted Meetings 04212016 Facilitated Meetings_y Attended Meetings_y 
0 TS X Y [email protected] 03/10/2016 0.0 0.0 0.0 TS [email protected] ... 03/10/2016 0.0 0.0 2.0 NaN NaN NaN NaN NaN NaN 
1 TS X Y [email protected] 03/10/2016 0.0 0.0 0.0 TS [email protected] ... 01/25/2016 0.0 0.0 0.0 NaN NaN NaN NaN NaN NaN 
2 TS X Y [email protected] 03/10/2016 0.0 0.0 0.0 TS [email protected] ... 04/06/2015 9.0 10.0 17.0 NaN NaN NaN NaN NaN NaN 

ValueError异常:不能重复轴线 all_users_sheets_hosts.filter重新索引(如= '公司')

+0

尝试总是提供[最小,完整和可验证的示例](http://stackoverflow.com/help/mcve)提问时。如果出现_pandas_问题,请提供样本_input_和_output_数据集(CSV/dict/JSON/Python代码格式中的5-7行_s text_,因此可以在为您编写答案时使用它)。这将有助于避免_situations_,例如:“您的代码不适合我”或“它不适用于我的数据”等。 – MaxU

+0

谢谢。编辑我的问题与数据帧的前三行,错误和它发生的地方 –

+0

你有很多重复的列(相同的列名称) - 你怎么能使用这个DF? – MaxU

回答

0

试试这个:

import pandas as pd 

df = pd.DataFrame([[11,'acme'],[22,'samme'],[33,'mamme']],columns=('SI','X')) 
bool_arr = ~df.X.str.contains('acme') 
df1 = df[bool_arr] 
print df1 

你可以现在用df1做保存/其他操作。

1

你能做到这样:

In [150]: df 
Out[150]: 
     A AXA  X ZXZ ZZNX 
0 acme axa pacme aaa  1 
1 meca  A BZZZ ccc  2 
2 YYY  a  c me  3 
3 000 macme 111 2222  4 

In [151]: df[(df.filter(like='X').astype(str).apply(lambda x: x.str.contains('acme'))) 
    .....: .sum(axis=1)==0 
    .....: ] 

Out[151]: 
     A AXA  X ZXZ ZZNX 
1 meca A BZZZ ccc  2 
2 YYY a  c me  3 

说明:

使用filter()我们可以过滤列,含X:含acme

In [152]: df.filter(like='X') 
Out[152]: 
    AXA  X ZXZ ZZNX 
0 axa pacme aaa  1 
1  A BZZZ ccc  2 
2  a  c me  3 
3 macme 111 2222  4 

搜索细胞 - 列由列,使用apply()功能

In [153]: df.filter(like='X').astype(str).apply(lambda x: x.str.contains('acme')) 
Out[153]: 
    AXA  X ZXZ ZZNX 
0 False True False False 
1 False False False False 
2 False False False False 
3 True False False False 

在Python:True == 1False ==0,每一行中这样总结细胞sum(axis=1)会给我们1为行,其中至少一个单元格中包含我们的搜索词和0 - 在别处:

In [154]: (df.filter(like='X').astype(str).apply(lambda x: x.str.contains('acme'))).sum(axis=1) 
Out[154]: 
0 1 
1 0 
2 0 
3 1 
dtype: int64 
+0

由于过滤器,我得到'ValueError:无法从重复轴重新索引'... –

+0

@FredericBastiat,你可以发布一个数据集,这将有助于重现你的错误? – MaxU

+0

在这里发表评论有点混乱。我会在你可能能够识别潜在问题的地方描述它。公司列将在一行中具有相同的值。许多行都有NaN值(可能也在公司列中)。许多公司列具有相同的名称(只有名为Company_y和Company_x的公司列)。还有许多其他(但不是全部)列命名相似(例如,meetings_x和meetings_y) –