【发布时间】:2019-08-20 23:02:35
【问题描述】:
这是一个金融工具标识符的数据框
import pandas as pd
import numpy as np
df = pd.DataFrame([["ISIN1", "CUSIP1", "SEDOL1"],
["ISIN2", "CUSIP2", "SEDOL2"],
["ISIN3", "CUSIP3", "SEDOL3"],
["ISIN4", "CUSIP4", "SEDOL4"]],
columns=["ISIN", "CUSIP", "SEDOL"])
df
ISIN CUSIP SEDOL
0 ISIN1 CUSIP1 SEDOL1
1 ISIN2 CUSIP2 SEDOL2
2 ISIN3 CUSIP3 SEDOL3
3 ISIN4 CUSIP4 SEDOL4
假设缺少几个条目
df.iloc[(1,1)] = np.nan
df.iloc[(1,2)] = np.nan
df.iloc[(2,0)] = np.nan
df.iloc[(3,0)] = np.nan
df.iloc[(3,1)] = np.nan
df
ISIN CUSIP SEDOL
0 ISIN1 CUSIP1 SEDOL3
1 ISIN2 NaN NaN
2 NaN CUSIP3 SEDOL3
3 NaN NaN SEDOL4
在列 ID 中,我想基于此层次结构捕获单个变量:如果缺少 ISIN,我想填充 CUSIP。如果 CUSIP 也丢失了,我想填充 SEDOL。
我试过这个嵌套的 if 语句:
def identifier(row):
if ~pd.isnull(row['ISIN']):
return row['ISIN']
elif pd.isnull(row['ISIN']) & ~pd.isnull(row['CUSIP']):
return row['CUSIP']
elif pd.isnull(row['ISIN']) & pd.isnull(row['CUSIP']) & ~pd.isnull(row['SEDOL']):
return row['SEDOL']
df['ID'] = df[['SEDOL', 'CUSIP', 'ISIN']].apply(identifier, axis=1)
在最后 2 个条目的 ID 列中返回错误输出。
ISIN CUSIP SEDOL ID
0 ISIN1 CUSIP1 SEDOL1 ISIN1
1 ISIN2 NaN NaN ISIN2
2 NaN CUSIP3 SEDOL3 NaN
3 NaN NaN SEDOL4 NaN
我的预期输出是这样的:
ISIN CUSIP SEDOL ID
0 ISIN1 CUSIP1 SEDOL1 ISIN1
1 ISIN2 NaN NaN ISIN2
2 NaN CUSIP3 SEDOL3 CUSIP3
3 NaN NaN SEDOL4 SEDOL4
希望我已经解释清楚了。 请注意,“ISIN”是一个字符串。我的代码中没有使用 .isin 函数。 提前谢谢你。
【问题讨论】: