gpt4 book ai didi

python - 在不同条件下将列添加到 pandas Dataframe

转载 作者:行者123 更新时间:2023-11-28 21:37:54 25 4
gpt4 key购买 nike

我有一个 Pandas 数据框。

import pandas as pd
data = pd.DataFrame({
'a': [0,1,0,0,1,1,0,1],
'b': [0,0,1,0,1,0,1,1],
'c': [0,0,0,1,0,1,1,1],
'rate': [0,0.1,0.11,0.12,0.24,0.27,0.3,0.4]})

a、b、c 是我的 channel ,我正在添加另一列,通过编写显示这些 channel 的行式总计的总和:

data['total'] = data.a + data.b + data.c

data

a b c rate total
1 1 0 0 0.10 1
2 0 1 0 0.11 1
3 0 0 1 0.12 1
4 1 1 0 0.24 2
5 1 0 1 0.27 2
6 0 1 1 0.30 2
7 1 1 1 0.40 3

我想处理总计 = 1 和总计 = 2 的数据

reduced = data[(data.a == 1) & (data.total == 2)]
print(reduced)

a b c rate total
4 1 1 0 0.24 2
5 1 0 1 0.27 2

我想向这个简化的数据框中添加列,如下所示:

      a  b  c  rate  total  prob_a  prob_b  prob_c
4 1 1 0 0.24 2 0.1 0.11 0
5 1 0 1 0.27 2 0.1 0 0.12

在缩减数据帧的第一行中,prob_c 为 0,因为 C 不存在(ABC => 110)。在简化数据框的第二行中,prob_b 为 0,因为 B 不存在 (ABC => 101)

在哪里,

# Channel a alone occurs (ABC => 100)
prob_a = data['rate'][(data.a == 1) & (data.total == 1)]

# Channel b alone occurs (ABC => 010)
prob_b = data['rate'][(data.b == 1) & (data.total == 1)]

# Channel c alone occurs (ABC => 001)
prob_c = data['rate'][(data.c == 1) & (data.total == 1)]

我试过这个:

reduced['prob_a'] = data['rate'][(data.a == 1) & (data.total == 1)]
reduced['prob_b'] = data['rate'][(data.b == 1) & (data.total == 1)]
reduced['prob_c'] = data['rate'][(data.c == 1) & (data.total == 1)]
print(reduced)

这导致了这个输出:

   a  b  c  rate  total  prob_a  prob_b  prob_c
4 1 1 0 0.24 2 NaN NaN NaN
5 1 0 1 0.27 2 NaN NaN NaN

最佳答案

国际联合会

reduced['prob_a'] = data.loc[(data.a == 1) & (data.total == 1),'rate'].values[0]
reduced['prob_b'] = data.loc[(data.b == 1) & (data.total == 1),'rate'].values[0]
reduced['prob_c'] = data.loc[(data.c == 1) & (data.total == 1),'rate'].values[0]

reduced[['prob_a','prob_b','prob_c']]=reduced[['prob_a','prob_b','prob_c']].mul(reduced[['a','b','c']].eq(1).values)
reduced
Out[698]:
a b c rate total prob_a prob_b prob_c
4 1 1 0 0.24 2 0.1 0.11 0.00
5 1 0 1 0.27 2 0.1 0.00 0.12

关于python - 在不同条件下将列添加到 pandas Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48831722/

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