pandas按照条件判断填充一列的内容
放了一个附件,请求大佬们帮助。内容是这样的。文本表格格式如下:
管线号 焊缝编号 焊接类型 壁厚 材质
天然气80-NG-5310-10001-A0BE31-N(GC2) 1 对焊 3.05 S31603&S31603
天然气80-NG-5310-10001-A0BE31-N(GC2) 2 对焊 3.05 20
天然气80-NG-5310-10001-A0BE31-N(GC2) 3 对焊 3.05 S31603
天然气80-NG-5310-10001-A0BE31-N(GC2) 4 对焊 3.05 S31603&S31603
天然气80-NG-5310-10001-A0BE31-N(GC2) 5 对焊 3.05 S31603&S31603
天然气80-NG-5310-10001-A0BE31-N(GC2) 6 对焊 3.05 S31603&S31603
天然气80-NG-5310-10001-A0BE31-N(GC2) 7 对焊 3.05 S31603&S31603
污水池甲烷气管线50-PG1-5310-10001-A0BE31-N(GC2) 1 对焊 3.05 S31603&S31603
我需要做到的是这样:
根据列"焊接类型","材质",“壁厚”的值依次判断,我用的pycharm,第三方用的pandas。
判断原则如下
1,如果是对焊,并且材质的文本内容包含“12Cr”,如果“壁厚”大于13,列“工艺卡编号”的值为"HKB12-06"
2,如果是对焊,并且材质的文本内容包含“12Cr”,如果“壁厚”大于10,列“工艺卡编号”的值为"HKB12-05"
3,如果是对焊,并且材质的文本内容包含“12Cr”,如果“壁厚”大于8,列“工艺卡编号”的值为"HKB12-04"
4,如果是承插焊,并且材质的文本内容包含“12Cr”,如果“壁厚”大于5.5,列“工艺卡编号”的值为"HKC12-03"
5,如果是承插焊,并且材质的文本内容包含“12Cr”,如果“壁厚”大于3,列“工艺卡编号”的值为"HKC12-02"
1,如果是对焊,并且材质的文本内容包含“20”,如果“壁厚”大于13,列“工艺卡编号”的值为"HKB20-06"
2,如果是对焊,并且材质的文本内容包含“20”,如果“壁厚”大于10,列“工艺卡编号”的值为"HKB20-05"
3,如果是对焊,并且材质的文本内容包含“20”,如果“壁厚”大于8,列“工艺卡编号”的值为"HKB20-04"
4,如果是承插焊,并且材质的文本内容包含“20,如果“壁厚”大于5.5,列“工艺卡编号”的值为"HKC20-03"
5,如果是承插焊,并且材质的文本内容包含“20”,如果“壁厚”大于3,列“工艺卡编号”的值为"HKC20-02"
以上条件都是一个成立了就不再执行其他判断
求助怎么实现呢 鱼油,你好!根据你的需求,可以使用Pandas库来实现。以下是一个示例代码,展示如何根据不同条件填充“工艺卡编号”列:
import pandas as pd
# 创建示例数据框
data = {
'管线号': ['天然气80-NG-5310-10001-A0BE31-N(GC2)']*7 + ['污水池甲烷气管线50-PG1-5310-10001-A0BE31-N(GC2)'],
'焊缝编号': ,
'焊接类型': ['对焊']*8,
'壁厚': *8,
'材质': ['S31603&S31603', '20', 'S31603', 'S31603&S31603', 'S31603&S31603', 'S31603&S31603', 'S31603&S31603', 'S31603&S31603']
}
df = pd.DataFrame(data)
# 定义条件和对应的值
conditions = [
(df['焊接类型'] == '对焊') & (df['材质'].str.contains('12Cr')) & (df['壁厚'] > 13),
(df['焊接类型'] == '对焊') & (df['材质'].str.contains('12Cr')) & (df['壁厚'] > 10),
(df['焊接类型'] == '对焊') & (df['材质'].str.contains('12Cr')) & (df['壁厚'] > 8),
(df['焊接类型'] == '承插焊') & (df['材质'].str.contains('12Cr')) & (df['壁厚'] > 5.5),
(df['焊接类型'] == '承插焊') & (df['材质'].str.contains('12Cr')) & (df['壁厚'] > 3),
(df['焊接类型'] == '对焊') & (df['材质'].str.contains('20')) & (df['壁厚'] > 13),
(df['焊接类型'] == '对焊') & (df['材质'].str.contains('20')) & (df['壁厚'] > 10),
(df['焊接类型'] == '对焊') & (df['材质'].str.contains('20')) & (df['壁厚'] > 8),
(df['焊接类型'] == '承插焊') & (df['材质'].str.contains('20')) & (df['壁厚'] > 5.5),
(df['焊接类型'] == '承插焊') & (df['材质'].str.contains('20')) & (df['壁厚'] > 3)
]
choices = [
'HKB12-06',
'HKB12-05',
'HKB12-04',
'HKC12-03',
'HKC12-02',
'HKB20-06',
'HKB20-05',
'HKB20-04',
'HKC20-03',
'HKC20-02'
]
# 使用 numpy 的 select 函数来根据条件选择相应的值
df['工艺卡编号'] = pd.Series(pd.NA)
import numpy as np
df['工艺卡编号'] = np.select(conditions, choices, default=None)
print(df)
此代码利用了`numpy.select`函数来根据多个条件应用相应的选择。请根据你的实际数据更新data部分,并确保已安装了`pandas`和`numpy`库:
pip install pandas numpy
希望以上代码能帮到你!有什么问题随时问哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 不想用numpy函数,还是想用熟悉层次的if函数可以吗?
比如做个函数,进行填充
比如下面这样看起来清楚点
def city_type(x):
if x['城市]in(['北京',上海',深圳']):
return'一线'
else:
return'新一线
df['city type']=df.apply(city_type,axis=1) 颂风侯 发表于 2024-09-12 12:56
不想用numpy函数,还是想用熟悉层次的if函数可以吗?
...
当然可以使用 `apply` 和自定义函数来实现这个需求。以下是一个示例代码,展示如何根据不同条件填充“工艺卡编号”列:
import pandas as pd
# 创建示例数据框
data = {
'管线号': [
'天然气80-NG-5310-10001-A0BE31-N(GC2)',
'天然气80-NG-5310-10001-A0BE31-N(GC2)',
'天然气80-NG-5310-10001-A0BE31-N(GC2)',
'天然气80-NG-5310-10001-A0BE31-N(GC2)',
'天然气80-NG-5310-10001-A0BE31-N(GC2)',
'天然气80-NG-5310-10001-A0BE31-N(GC2)',
'天然气80-NG-5310-10001-A0BE31-N(GC2)',
'污水池甲烷气管线50-PG1-5310-10001-A0BE31-N(GC2)'
],
'焊缝编号': ,
'焊接类型': ['对焊', '对焊', '对焊', '对焊', '对焊', '对焊', '对焊', '对焊'],
'壁厚': ,
'材质': ['S31603&S31603', '20', 'S31603', 'S31603&S31603', 'S31603&S31603', 'S31603&S31603', 'S31603&S31603', 'S31603&S31603']
}
df = pd.DataFrame(data)
# 定义填充“工艺卡编号”的函数
def fill_process_card(row):
if row['焊接类型'] == '对焊' and '12Cr' in row['材质']:
if row['壁厚'] > 13:
return 'HKB12-06'
elif row['壁厚'] > 10:
return 'HKB12-05'
elif row['壁厚'] > 8:
return 'HKB12-04'
elif row['焊接类型'] == '承插焊' and '12Cr' in row['材质']:
if row['壁厚'] > 5.5:
return 'HKC12-03'
elif row['壁厚'] > 3:
return 'HKC12-02'
elif row['焊接类型'] == '对焊' and '20' in row['材质']:
if row['壁厚'] > 13:
return 'HKB20-06'
elif row['壁厚'] > 10:
return 'HKB20-05'
elif row['壁厚'] > 8:
return 'HKB20-04'
elif row['焊接类型'] == '承插焊' and '20' in row['材质']:
if row['壁厚'] > 5.5:
return 'HKC20-03'
elif row['壁厚'] > 3:
return 'HKC20-02'
return None
# 应用函数填充“工艺卡编号”列
df['工艺卡编号'] = df.apply(fill_process_card, axis=1)
print(df)
这个代码定义了一个 `fill_process_card` 函数,根据你提供的条件来填充“工艺卡编号”列。然后使用 `apply` 方法将这个函数应用到数据框的每一行。这样可以确保代码逻辑清晰且易于理解。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]