gpt4 book ai didi

python - 如何根据 Pandas 数据框中多个其他列的值添加两个新列?

转载 作者:行者123 更新时间:2023-12-04 09:56:01 24 4
gpt4 key购买 nike

我正在尝试根据其他几列的值将两列添加到现有数据框中。我的数据框如下所示:
df = pd.DataFrame({'Type':['A', 'A', 'A', 'B','',''], 'Type1':['A', 'A', '', 'B','',''], 'Type2':['A','B','B','B','A',''], 'Score':[1, 2, 3, 1, 0 ,0], 'Score1':[2, 1, 0, 1, 0 ,0], 'Score2':[1, 3, 2, 1, 2 ,0]})

  Type  Type1   Type2   Score   Score1  Score2
0 A A A 1 2 1
1 A A B 2 1 3
2 A B 3 0 2
3 B B B 1 1 1
4 A 0 0 2
5 0 0 0

我想添加两列“Score_A”和“Score_B”,这样“Score_A”将是分数的平均值
对于 Type 为“A”的情况(对于每一行)。 'Score_B' 也是如此。一个问题是,当 Type 为空时,不应使用分数来计算平均值。

在这种情况下,成功函数的结果将是:
Score_A  Score_B
1.33 0
1.5 3
3 2
0 1
2 0
0 0

我已经在行级别运行嵌套循环来执行此操作,但是有更好的方法吗?

最佳答案

m1 = (df[['Type', 'Type1', 'Type2']] == 'A')
m2 = (df[['Type', 'Type1', 'Type2']] == 'B')
scores = df[['Score', 'Score1', 'Score2']]

df['Score_A'] = pd.DataFrame(np.where(m1, scores, np.nan)).mean(skipna=True, axis=1).fillna(0)
df['Score_B'] = pd.DataFrame(np.where(m2, scores, np.nan)).mean(skipna=True, axis=1).fillna(0)

print(df)

打印:
  Type Type1 Type2  Score  Score1  Score2   Score_A  Score_B
0 A A A 1 2 1 1.333333 0.0
1 A A B 2 1 3 1.500000 3.0
2 A B 3 0 2 3.000000 2.0
3 B B B 1 1 1 0.000000 1.0
4 A 0 0 2 2.000000 0.0
5 0 0 0 0.000000 0.0

关于python - 如何根据 Pandas 数据框中多个其他列的值添加两个新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61924147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com