从这个数据帧开始:

     0     1     2
02  en    it  None
03  en  None  None
01  nl    en   fil

有些值丢失。我正在尝试按行应用替换函数,例如在伪代码中:
def replace(x):
    if 'fil' and 'nl' in row:
        x = ''

我知道我可以做一些事情,比如:
df.apply(f, axis=1)

函数定义如下:
def f(x):
    if x[0] == 'nl' and x[2] == 'fil':
        x[0] = ''
    return x

获得:
     0     1     2
02  en    it  None
03  en  None  None
01        en   fil

但是先验地,我不知道字符串在列中的实际位置,所以我必须使用类似于df方法的搜索,但要按行搜索。
编辑:每个字符串可以出现在列中的任何位置。

最佳答案

大熊猫的布尔索引和文本比较
您可以基于这样的boolean indexing创建string comparisons

df['0'].str.contains('nl') & df['2'].str.contains('fil')

或者由于您更新了列可能会更改:
df.isin(['fil']).any(axis=1) & df.isin(['nl']).any(axis=1)

以下是测试用例:
import pandas as pd
from cStringIO import StringIO

text_file = '''
     0     1     2
02  en    it  None
03  en  None  None
01  nl    en   fil
'''

# Read in tabular data
df = pd.read_table(StringIO(text_file), sep='\s+')
print 'Original Data:'
print df
print

# Create boolean index based on text comparison
boolIndx = df.isin(['nl']).any(axis=1) & df.isin(['fil']).any(axis=1)
print 'Example Boolean index:'
print boolIndx
print

# Replace string based on boolean assignment
df.loc[boolIndx] = df.loc[boolIndx].replace('nl', '')
print 'Filtered Data:'
print df
print

Original Data:
    0     1     2
2  en    it  None
3  en  None  None
1  nl    en   fil

Example Boolean index:
2    False
3    False
1     True
dtype: bool

Filtered Data:
    0     1     2
2  en    it  None
3  en  None  None
1        en   fil

10-04 21:06