繁体   English   中英

如果其他行在不同字段中具有相同值,则更改行中的字段

[英]Change field in row if other row has same value in different field

我正在寻找基于 Python 的解决方案来解决我经常遇到的常见任务。 (我知道,这一定有很酷的 SQL 魔法,但是……现在不行。)

给定一个表,如果oid相同,我们想更改字段f2
(假设f2始终包含bar或如果oid42则为空):

ID f1 f2 oid
1个 酒吧 42
2个 49
3个 巴兹 42

变成:

ID f1 f2 oid
1个 酒吧 42
2个 49
3个 巴兹 酒吧 42

我目前正在使用itertools.combinations来避免重复比较,这似乎比双for循环更有效。 但是对于非常大的数据集,它仍然变得不方便……考虑到 Big-O-Notation。

通过pandas或者numpy可以更优雅的解决问题吗?

假设 f2 始终包含 bar 或者如果 oid 为 42 则为空

也许我们也可以first使用groupby + transform :

df['f2'] = df.replace('', np.nan).groupby('oid')['f2'].transform('first').fillna('')

Output:

   id   f1   f2  oid
0   1  foo  bar   42
1   2  foo        49
2   3  baz  bar   42

我能想到的唯一解决方案是使用groupby + ffill

df['f2'] = df.replace('', np.nan).groupby('oid')['f2'].ffill()

Output:

>>> df
   id   f1   f2  oid
0   1  foo  bar   42
1   2  foo  NaN   49
2   3  baz  bar   42

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM