gpt4 book ai didi

python - 如何根据条件语句重命名列的元素?

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:24 25 4
gpt4 key购买 nike

在 pandas 中,给定这个数据框:

df = pd.DataFrame({'l':['a','b','a','c','b','b','a','b','b','a'], 'v':['x','x','y','y','y','x','x','y','x','y'],'n':[1,2,1,2,2,1,2,1,1,2], 'g':[0,0,0,0,0,1,1,1,1,1]})

根据应用于数据框的一些条件语句重命名 v 的元素的最佳解决方案是什么?

基本上,对于每一行(无论是 g == 0 还是 g == 1):

if df.l==a and df.n==1:
df.v='val1'
elif df.l==a and df.n==2:
df.v='val2'
elif df.l==b and df.n==1:
df.v='val3'
elif df.l==b and df.n==2:
df.v='val4'

最佳答案

你可以简单地用一个 bool 掩码写出来:

df.loc[(df.l == 'a') & (df.n == 1), 'v'] = 'val1'
df.loc[(df.l == 'a') & (df.n == 2), 'v'] = 'val2'
df.loc[(df.l == 'b') & (df.n == 1), 'v'] = 'val3'
df.loc[(df.l == 'b') & (df.n == 2), 'v'] = 'val4'

In [11]: df
Out[11]:
g l n v
0 0 a 1 val1
1 0 b 2 val4
2 0 a 1 val1
3 0 c 2 y
4 0 b 2 val4
5 1 b 1 val3
6 1 a 2 val2
7 1 b 1 val3
8 1 b 1 val3
9 1 a 2 val2

更一般地说,您可以使用 enumerateitertools.product (类似于菲利普的回答):

from itertools import product
lhs_values, rhs_values = ['a', 'b'], [1, 2]
for i, (lhs, rhs) in enumerate(product(lhs_values, rhs_values)):
df.loc[(df.l == lhs) & (df.n == rhs), 'v'] = 'val%s' % (i + 1)

也许您只需要使用唯一的列值:

for i, (lhs, rhs) in enumerate(product(df.l.unique(), df.n.unique())):
df.loc[(df.l == lhs) & (df.n == rhs), 'v'] = 'val%s' % (i + 1)

In [21]: df
Out[21]:
g l n v
0 0 a 1 val1
1 0 b 2 val4
2 0 a 1 val1
3 0 c 2 val6
4 0 b 2 val4
5 1 b 1 val3
6 1 a 2 val2
7 1 b 1 val3
8 1 b 1 val3
9 1 a 2 val2

关于python - 如何根据条件语句重命名列的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18581605/

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