Python-通过复制创建新的DF列-从现有列值进行部分字符串匹配
我有一个带有50k条记录的数据帧,其中一个列值如下 DF\n 我正在从Python-通过复制创建新的DF列-从现有列值进行部分字符串匹配,python,string,dataframe,Python,String,Dataframe,我有一个带有50k条记录的数据帧,其中一个列值如下 DF\n 我正在从列中查找关键字-3Y,3M,2Y和1Y,如果找到,需要将值复制到新的DF列名期限,3M,1M等。 如果未找到,它可以显示FALSE或NAN 我尝试了以下代码 df['Tenor'] = ""\n df['Tenor'] = df.column.apply(lambda x: x in ['3Y','3M,'1Y','1M'] 这将在新列的所有行中返回为FALSE。 您能告诉我满足我的要求的最佳方法是什么吗?您可以使用正则表
列
中查找关键字-3Y
,3M
,2Y
和1Y
,如果找到,需要将值复制到新的DF列名期限
,3M
,1M
等。
如果未找到,它可以显示FALSE
或NAN
我尝试了以下代码
df['Tenor'] = ""\n
df['Tenor'] = df.column.apply(lambda x: x in ['3Y','3M,'1Y','1M']
这将在新列的所有行中返回为FALSE
。
您能告诉我满足我的要求的最佳方法是什么吗?您可以使用正则表达式:
import pandas as pd
df = pd.DataFrame(dict(
COLUMN = [
'ABC-1M-Deliveryorder','KGF-ORDERDelivery-2Y',
'DEFGHIABC1M-OPEN', 'KGFABC', 'ABC-3Y-ORDER'
]
))
df['Tenor'] = df['COLUMN'].str.contains('3Y|3M|2Y|1Y|1M', regex=True)
编辑:OP提出了后续问题:
无论列在哪里找到字符串2Y、3Y等,上述代码段都返回TRUE。。但我需要以下索引列的输出新0 ABC-1M-Deliveryorder 1M 1 KGF-ORDERDelivery-2Y 2Y 2 DEFGHIABC1M-OPEN 1M 3 KGFABC Nan 4 ABC-3Y-ORDER 3Y 如果是这种情况,则可能需要使用自定义函数和
pandas.Series.apply
如下所示:
import pandas as pd
df = pd.DataFrame(dict(
COLUMN = [
'ABC-1M-Deliveryorder','KGF-ORDERDelivery-2Y',
'DEFGHIABC1M-OPEN', 'KGFABC', 'ABC-3Y-ORDER'
]
))
def find_substring(x):
for y in ('3Y','3M','2Y','1Y','1M'):
if y in x:
return y
df['Tenor'] = df['COLUMN'].apply(find_substring)
print(df)
输出:
COLUMN Tenor
0 ABC-1M-Deliveryorder 1M
1 KGF-ORDERDelivery-2Y 2Y
2 DEFGHIABC1M-OPEN 1M
3 KGFABC None
4 ABC-3Y-ORDER 3Y
无论列在哪里找到字符串2Y、3Y等,上述代码段都返回TRUE 但我需要的输出如下 代码输出 ''' 新索引列 0 ABC-1M-Deliveryorder 1M 1 KGF-ORDERDelivery-2Y 2Y 2除雾器1米-开启1米 3 KGFABC-Nan 4 ABC-3Y-订单3Y
无论列在哪里找到字符串2Y、3Y等,上述代码段都返回TRUE。。但我需要以下索引列的输出新0 ABC-1M-Deliveryorder 1M 1 KGF-ORDERDelivery-2Y 2Y 2 DEFGHIABC1M-OPEN 1M 3 KGFABC Nan 4 ABC-3Y-ORDER3Y@Dax2ib我用一个例子更新了我的答案,说明了你是如何做到这一点的。
COLUMN Tenor
0 ABC-1M-Deliveryorder 1M
1 KGF-ORDERDelivery-2Y 2Y
2 DEFGHIABC1M-OPEN 1M
3 KGFABC None
4 ABC-3Y-ORDER 3Y