gpt4 book ai didi

python - 合并两列,同时优先考虑第一列

转载 作者:行者123 更新时间:2023-11-28 20:31:39 25 4
gpt4 key购买 nike

来自 this question ,我有两个矩阵,我希望以这样一种方式合并它们,即我将 join dfB 保留到 dfA 上,无论我在哪里,都用非 NaN 值替换 NaN 值。

也就是说,

>>> dfA
s_name geo zip date value
0 A zip 60601 2010 NaN # In the earlier question, this was None
1 B zip 60601 2010 NaN # rather than NaN, which was
2 C zip 60601 2010 NaN # a mistake.
3 D zip 60601 2010 NaN

>>> dfB
s_name geo zip date value
0 A zip 60601 2010 1.0
1 B zip 60601 2010 NaN
3 D zip 60601 2010 4.0

合并它们,我明白了:

>>> new = pd.merge(dfA,dfB,on=["s_name","geo", "geoid", "date"],how="left")
>>> new.head()
name geo zip date value_x value_y
0 A state 01 2009 NaN 1.0
1 B state 01 2010 NaN NaN
2 C state 01 2011 NaN NaN
3 D state 01 2012 NaN 4.0
4 E state 01 2013 NaN 5.0

我不能确定 value_y 总是编号而 value_x 总是 NaN。但我想要一个合并值,将其称为 value,即不是 NaN 的值。我试试这个:

>>> new["value"] = new.apply(lambda r: r.value_x or r.value_y, axis=1)
>>> new.head()
name geo zip date value_x value_y value
0 A state 01 2009 NaN 1.0 NaN
1 B state 01 2010 NaN NaN NaN
2 C state 01 2011 NaN NaN NaN
3 D state 01 2012 NaN 4.0 NaN
4 E state 01 2013 NaN 5.0 NaN

哦不。

NaN 应该传播是有道理的,但这不是我想要的。我想要返回任何存在的逻辑,如果存在任何一个则不返回 NaN 。

我想要 None 给我的逻辑。你可以看到:

>>> new["value_z"] = None
>>> new.head()
name geo zip date value_x value_y value value_z
0 A state 01 2009 NaN 1.0 NaN None
1 B state 01 2010 NaN NaN NaN None
2 C state 01 2011 NaN NaN NaN None
3 D state 01 2012 NaN 4.0 NaN None
4 E state 01 2013 NaN 5.0 NaN None

>>> new["value2"] = new.apply(lambda r: r.value_z or r.value_y, axis=1)
>>> new.head()
name geo zip date value_x value_y value value_z value2
0 A state 01 2009 NaN 1.0 NaN None 1.0
1 B state 01 2010 NaN NaN NaN None NaN
2 C state 01 2011 NaN NaN NaN None NaN
3 D state 01 2012 NaN 4.0 NaN None 4.0
4 E state 01 2013 NaN 5.0 NaN None 5.0

创建 value2 的逻辑是我正在寻找的行为,而不是 value

执行此操作的最佳方法是什么?

最佳答案

如果您偏好 value_x ,您可以尝试:

df.value_x = df.value_x.fillna(df.value_y)
df.pop('value_y')

或:

df.value_x=df.value_x.fillna(df.pop('value_y'))

>>df
name geo zip date value_x
0 A state 1 2009 1.0
1 B state 1 2010 NaN
2 C state 1 2011 NaN
3 D state 1 2012 4.0
4 E state 1 2013 5.0

关于python - 合并两列,同时优先考虑第一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54033445/

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