pandas 基于df中的其他列创建df列

lymnna71  于 2023-01-24  发布在  其他
关注(0)|答案(1)|浏览(244)

通过在两列上匹配num,基于num_type_len创建len列。
| 数值类型长度|实际数量|
| - ------|- ------|
| [8812_正在检查_90、7094_保存_75、9939_正在检查_89]|小行星7094|
| [6846检查87年,1906年检查90年]|小行星1906|
预期产出:-

| Report_length | Actual_num |
| ------------- | ---------- |
| 75            | 7094       |
| 90            | 1906       |
qpgpyjmq

qpgpyjmq1#

您可以比较由Actual_num转换为字符串的列表拆分值,并使用iter技巧获得next的第一个匹配值:

df['Report_length'] = [next(iter([z.split('_')[-1] 
                       for z in x if z.split('_')[0] == str(y)]), None) 
                       for x, y in zip(df['num_type_len'], df['Actual_num'])]

df = df[['Report_length','Actual_num']]
print (df)
  Report_length  Actual_num
0            75        7094
1            90        1906

或者将DataFrame.explode与比较拆分值的列表列一起使用:

df1 = df.explode('num_type_len')

df2 = (df1['num_type_len'].str.split('_', expand=True)
                          .rename(columns={2:'Report_length'})
                          .assign(Actual_num = df1['Actual_num']))

df = df2.loc[df2[0].eq(df2['Actual_num'].astype(str)), ['Report_length', 'Actual_num']]
print (df)
  Report_length  Actual_num
0            75        7094
1            90        1906

相关问题