这是关于python中的一个简单代码

2024-06-12 09:46:54 发布

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

我这里有两张桌子

 Reg_No     Name  Marks Grade  Sub1  Sub2
     1  Sanjana    100    A1  60.0   NaN
     2    Alfaz     70     A   NaN  65.0
     3     Ritu     50     B  30.0   NaN
     4    Priya     60     A   NaN  40.0

        Sub1  Sub2
IA      0.50  0.40
OA      0.50  0.60
Others  0.25  0.25

第一个表包含markssub1sub2,第二个表包含基于主题的行IAOAOthers

我需要基于第二个表将第一个表的列Marks拆分为3个新列。第一列是IA列,如果它的sub1在第一个表中,它应该基于第二个表的sub1列进行拆分

示例:

IA = table1.marks*table2(IA)(sub1) 

100*0.50

这应该是我的输出

Reg_No  Name    Marks   Grade   Sub 1   Sub 2   IA_ OA_ Others_
1   Sanjana       100    A1     60              50  50  25
2   Alfaz         100    A              65      40  60  25
3   Ritu          100    B      30              50  50  25
4   Priya         100    A              40      40  60  25

请告诉我如何编码


Tags: nonamea1nanreggradeiaoa
1条回答
网友
1楼 · 发布于 2024-06-12 09:46:54

我从第二个DataFrame中获取每一行,并将其与apply()一起使用,在第一个DataFrame中创建新列

import pandas as pd
import io

text = '''Marks  Sub1  Sub2
100    60.0  NaN
70     NaN   65.0
50     30.0  NaN
60     NaN   40.0'''
df1 = pd.read_csv(io.StringIO(text), sep='\s+')

text = '''Sub1  Sub2
IA      0.50  0.40
OA      0.50  0.60
Others  0.25  0.25'''
df2 = pd.read_csv(io.StringIO(text), sep='\s+')

for row in df2.itertuples():
    name, sub1, sub2 = row  
    df1[name] = df1.apply(lambda x: (x['Marks']*sub2) if pd.isna(x['Sub1']) else (x['Marks']*sub1), axis=1)

print(df1)

结果:

   Marks  Sub1  Sub2    IA    OA  Others
0    100  60.0   NaN  50.0  50.0    25.0
1     70   NaN  65.0  28.0  42.0    17.5
2     50  30.0   NaN  25.0  25.0    12.5
3     60   NaN  40.0  24.0  36.0    15.0

相关问题 更多 >