Python 熊猫搜索多列上的子字符串
我有一个这样的dfPython 熊猫搜索多列上的子字符串,python,pandas,Python,Pandas,我有一个这样的df c_name f_name 0 abc abc12 1 xyz abc1 2 mnq mnq2 目标是在两列之间找到一个子字符串,并知道它属于哪一列。首选项应该是c_name,因为如果子字符串在两列中,则c_name优先于,例如:如果我在上述数据帧中搜索abc,我应该以某种方式获得c_name的第0行abc,以及f_name的第1行abc1 为了解决这个问题,我从 df[df['c_name']
c_name f_name
0 abc abc12
1 xyz abc1
2 mnq mnq2
目标是在两列之间找到一个子字符串,并知道它属于哪一列。首选项应该是c_name
,因为如果子字符串在两列中,则c_name
优先于,例如:如果我在上述数据帧中搜索abc
,我应该以某种方式获得c_name
的第0行abc
,以及f_name
的第1行abc1
为了解决这个问题,我从
df[df['c_name'].str.contains('abc',case=False)]
这将为我提供
c_name
的结果。现在的问题是如何排除在f_name
上执行相同操作时已有结果的行。非常感谢您的帮助 将您的第一个搜索结果标记为2。如果新的搜索结果符合要求,则此项将被覆盖(1)
import pandas as pd
row =[['abcx','abcy'],
['efg','abcz'],
['higj','UK']]
df= pd.DataFrame(row)
df.columns = ['c_name', 'f_name']
print df[df['c_name'].str.contains('abc', case=False)]
delta_df =df[~df['c_name'].str.contains('abc', case=False)]
print delta_df[delta_df['f_name'].str.contains('abc', case=False)]
输出
c_name f_name
0 abcx abcy
c_name f_name
1 efg abcz
堆叠成一系列将
获取子字符串的真值str.contains
返回数据帧unstack
- 子集结果以确保至少一个匹配
获取列中的第一个idxmax(1)
True
下面是另一个简单的方法:
df['new_col'] = df['c_name'] + ' ' + df['f_name']
new\u col
中搜索子字符串,例如
result = df[df['new_col'].str.contains('abc')]
del results['new_col']
以下是一个例子:
>>> df= pd.DataFrame(row, columns=['c_name', 'f_name'])
>>> df
c_name f_name
0 abcx abcy
1 efg abcz
2 higj UK
>>> df['new_col'] = df['c_name'] + ' ' + df['f_name']
>>> results = df[df['new_col'].str.contains('abc')]
>>> del df['new_col'], results['new_col']
>>> results
c_name f_name
0 abcx abcy
1 efg abcz
问题是怎样的:)我知道该怎么做,我只是不知道该怎么做,因为我对pandasI不太精通。我可以依靠你的回答:)非常感谢。这是一个有趣的方法这回答了你的问题吗?
result = df[df['new_col'].str.contains('abc')]
del results['new_col']
>>> df= pd.DataFrame(row, columns=['c_name', 'f_name'])
>>> df
c_name f_name
0 abcx abcy
1 efg abcz
2 higj UK
>>> df['new_col'] = df['c_name'] + ' ' + df['f_name']
>>> results = df[df['new_col'].str.contains('abc')]
>>> del df['new_col'], results['new_col']
>>> results
c_name f_name
0 abcx abcy
1 efg abcz