【问题标题】:This is regarding a simple code in python这是关于python中的一个简单代码
【发布时间】:2019-12-03 04:59:32
【问题描述】:

我这里有两张桌子

 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

请告诉我如何编写代码

【问题讨论】:

  • 始终将代码、数据和完整的错误消息作为文本(不是图像)放在有问题(不在评论中)。
  • 显示预期结果 - 也作为文本。
  • 更新了请查收
  • 未更新 - 我仍然只看到图像,而不是文本。我确实看到了任何代码。我的 python 不能使用图像中的数据。
  • 我没有代码,数据已更新

标签: python loops if-statement


【解决方案1】:

我从第二个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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多