【发布时间】:2021-03-23 15:10:26
【问题描述】:
我有一个数据框,我需要根据几列中行的相同值应用条件并更新其他列。
输入数据帧代码:
df = DataFrame({
'exp':['1y','1y','1y','1y','1y','1y'],
'mat':['1y','1y','1y','2y','2y','2y'],
'reg':['in', 'in', 'in', 'in', 'in', 'in'],
'con':['w','s','c','w','s','c'],
'val':[2.5,0,-2.5,2.5,0,-2.5],
'rs':[6, 10, 4, 12, 30, 6 ]
})
df
输入数据框:
exp mat reg con val rs
0 1y 1y in w 2.5 6
1 1y 1y in s 0.0 10
2 1y 1y in c -2.5 4
3 1y 2y in w 2.5 12
4 1y 2y in s 0.0 30
5 1y 2y in c -2.5. 6
预期输出数据帧:
exp mat reg con val rs
0 1y 1y in w 2.5 5
1 1y 1y in s 0.0 10
2 1y 1y in c -2.5 1
3 1y 2y in w 2.5 9
4 1y 2y in s 0.0 30
5 1y 2y in c -2.5 3
多个条件基于行和列:
-
对于列中的相同值
就像 exp=1y, mat=1y, reg=in 的所有 3 行一样。一个。根据 col 'con' 更新列 'rs'。
if 'con' == w, then rs = (current_rs + rs(con == c)) / 2 i.e (6+4)/2 if 'con' == s, then no changes if 'con' == c, then rs = (rs(con == w) - current_rs)) / 2 i.e (6-4)/2 -
从 3 行组中应用相同的条件,其中 exp=1y, mat=2y, reg=in
我的数据集非常大,还有许多其他区域以及“exp”、“mat”和“reg”列的更多组合。
我尝试了很多方法,例如 groupby、iloc、np.where、filter,但都没有成功。
尝试失败:
df.groupby(['exp','mat','reg']) # not sure what can be the next condition
【问题讨论】:
-
您不应该从帖子中删除您的尝试...
-
我刚刚删除了使问题更短的尝试,同时修改了问题以使其更清晰。
-
嘿,我正要复制你的数据框初始化。 :-(
-
很多人都希望看到真正的尝试,在某些情况下,这可能是您忽略了一些简单的事情。另外,您在那里发布的内容并不长。