我需要基于Pandas数据框中的另一列的值来设置一列的值。这是逻辑:
if df['c1'] == 'Value':
df['c2'] = 10
else:
df['c2'] = df['c3']
我无法做到这一点,我想要做的就是简单地创建一个具有新值的列(或更改现有列的值:任何一个都对我有用)。
如果我尝试运行上面的代码,或者将其编写为函数并使用apply方法,则会得到以下信息:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
一种方法是将索引与配合使用.loc
。
例
在没有示例数据框的情况下,我将在此处进行补充:
import numpy as np
import pandas as pd
df = pd.DataFrame({'c1': list('abcdefg')})
df.loc[5, 'c1'] = 'Value'
>>> df
c1
0 a
1 b
2 c
3 d
4 e
5 Value
6 g
假设您要创建一个新列 c2
,c1
除where c1
是之外,该列等效Value
,在这种情况下,您想将其分配给10:
首先,您可以使用以下两行之一来创建新列c2
,并将其设置为,等同于c1
,(它们本质上是做相同的事情):
df = df.assign(c2 = df['c1'])
# OR:
df['c2'] = df['c1']
然后,找到所有c1
等于'Value'
使用的索引.loc
,并c2
在这些索引处分配所需的值:
df.loc[df['c1'] == 'Value', 'c2'] = 10
最终,您将得到:
>>> df
c1 c2
0 a a
1 b b
2 c c
3 d d
4 e e
5 Value 10
6 g g
如果如您在问题中所建议的那样,有时您可能只是想替换已经具有的列中的值,而不是创建一个新列,然后跳过该列的创建,然后执行以下操作:
df['c1'].loc[df['c1'] == 'Value'] = 10
# or:
df.loc[df['c1'] == 'Value', 'c1'] = 10
给你:
>>> df
c1
0 a
1 b
2 c
3 d
4 e
5 10
6 g
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句