gpt4 book ai didi

python - 是否可以使用 DataFrame 中的 if 语句同时(只需 1 步)更改 2 列?

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:13 26 4
gpt4 key购买 nike

我在 python 上使用一些 DataFrame,我遇到了一种情况,我必须在相同的 if 条件下同时更改 2 列。我解决了我的问题,但我并没有只用一个 if 条件。

我试图搜索一些相关内容,但我只在 if 条件有 2 列或更多列时找到,而不是在满足条件时找到。

假设我们有:

data.head()

Foo
1 a
2 a
3 b
4 b
5 b

如果 data['Foo'] == a,我们做 data['Foo'] = cdata['Bar'] = 10 ,否则 data['Bar'] = 0。所以,预期的输出是:

data.head()

Foo Bar
1 c 10
2 c 10
3 b 0
4 b 0
5 b 0

我使用两次 np.where() 解决了这个问题(所以,我验证了 2 个条件)。我必须使用 apply() 吗?

我想要这样的东西:

if data['Foo'] == a:
data['Foo'] = c
data['Bar'] = 10
else:
data['Bar'] = 0

请注意,它只验证了一次条件。另外,这只是出于好奇 :),因为我已经解决了我的问题。

最佳答案

关闭,你需要的是使用numpy.where :

arr = np.where((data['Foo'] == 'a').values[:, None], ['c', 10], ['b', 0])
print (arr)
[['c' '10']
['c' '10']
['b' '0']
['b' '0']
['b' '0']]

但是 - 所有值都被转换为字符串,并且 Foo 也被设置为 b。如果在所有列中设置所有数字或所有字符串值,那么可能的用例。

data[['Foo','Bar']] = pd.DataFrame(arr, index=data.index)
print (data)
Foo Bar
1 c 10
2 c 10
3 b 0
4 b 0
5 b 0

仅关闭 pandas 解决方案:

data = data.assign(Bar = 0)
data.loc[data['Foo'] == 'a', ['Foo', 'Bar']] = ['c', 10]

关于python - 是否可以使用 DataFrame 中的 if 语句同时(只需 1 步)更改 2 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57180709/

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