使用从单独的表填充数据帧

2024-09-21 03:27:12 发布

您现在位置:Python中文网/ 问答频道 /正文

data1={'Policy Number':['FSH1235456','FSH7643643','CHH123124','CHH123145252','CHH124124'],'State':['FL','TX','GA','TX','TX'],'TERR':[1,2,3,4,5]}

data2={'TERR':[1,2,3,4,5],'CHH':[0,.15,.65,.35,.20],'FSH':[0,.15,.25,.35,.20]}

output={'Policy Number':['FSH1235456','FSH7643643','CHH123124','CHH123145252','CHH124124'],'State':['FL','TX','GA','TX','TX'],'TERR':[1,2,3,4,5],'Test':[0,.15,0,0,0]}


df1=pd.DataFrame(data1)

df2=pd.DataFrame(data2)

df3=pd.DataFrame(output)

以上测试数据。你知道吗

我试图在df1中创建一个新列,称为df1['Test'],它包含基于以下条件的df2['FSH']值:

  1. 状态为“TX”
  2. 保单编号包含“FSH” 3.df1的值[“Terr”]=df2的值[“Terr”]

查看df3以获得正确的输出。你知道吗

我试着做的是:

if df1.State.any()=="TX":
    if df1["Policy Number"].str.contains("FSH").any():
        for i in df["TERR"]:
            df1['% TERR']=df2.loc[[i],["FSH"]]

然而,我的输出是充满南,以及一个独特的正确答案。你知道吗

我试图检查以确保正确的I值通过

print(df2.loc[[i],["FSH"]]

而且打印正确。你知道吗

有什么想法吗?你知道吗


Tags: numberdataframepolicypddf1statedf2tx
3条回答

你只是想把数据从df2放到df1里吗?如果是这样,您可以使用melt重塑df2,然后执行merge。你知道吗

df1['policy_prefix'] = df1['Policy Number'].str[:3]
df2 = df2.melt(id_vars='TERR', value_vars=['CHH', 'FSH'], 
               value_name='Test', 
               var_name='policy_prefix')
df1 = df1.merge(df2, on=['policy_prefix', 'TERR'])

如果您只想将其应用于状态为“TX”的行,则可以在合并后将其他值设置为null:

   import numpy as np 
   df1.loc[df1.State!='TX', 'Test'] = np.nan

我不知道这是最好还是最快的解决方案,但有一个选择是合并你的2个数据帧,然后根据你的条件过滤,然后更新:

new = df1.merge(df2, on='TERR')
mask = new[((new['State']=='TX') & (new['Policy Number'].str.contains('FSH')))]

df1['Test'] = 0
df1['Test'].update(mask['FSH'])

    Policy Number   State   TERR    Test
0   FSH1235456        FL    1       0.00
1   FSH7643643        TX    2       0.15
2   CHH123124         GA    3       0.00
3   CHH123145252      TX    4       0.00
4   CHH124124         TX    5       0.00

你可以使用numpy,通过传递条件

cond1 = (df1['State'] == 'TX')
cond2 = (df1['Policy Number'].str.contains('FSH'))
cond3 = (df1["TERR"] == df2['TERR'])
df1['Test'] = np.where(cond1 & cond2 & cond3, df2['FSH'], 0)

    Policy Number   State   TERR    Test
0   FSH1235456      FL      1       0.00
1   FSH7643643      TX      2       0.15
2   CHH123124       GA      3       0.00
3   CHH123145252    TX      4       0.00
4   CHH124124       TX      5       0.00

相关问题 更多 >

    热门问题