我需要进行一个数学运算,该运算取决于第二列中的值。以下是设置。
给定一个简单的数据框(`df`):
我可以添加一个新列(
但我想不通的是如何将表达式与另一列的值进行条件关联(例如,仅当
为了更清楚地阐述,我将在
我从上面第二个示例的评论中得到了这个代码,但我无法使其工作。它会抛出一个“ValueError”,因为有太多的值——也就是说,我正在尝试同时传递过滤器和操作列,但它只期望过滤器。这个 Stack Overflow 帖子也使用类似于我上面的表达式的“loc”——但是使用静态的“col1”。
给定一个简单的数据框(`df`):
df = pd.DataFrame({
'col1' : ['A', 'A', 'B', np.nan, 'D', 'C'],
'col2' : [2, 1, 9, 8, 7, 4],
'col3': [0, 1, 9, 4, 2, 3],
})
In [11]: df
Out[11]:
col1 col2 col3
0 A 2 0
1 A 1 1
2 B 9 9
3 NaN 8 4
4 D 7 2
5 C 4 3
我可以添加一个新列(
math
),然后根据10与col3
的和填入一个数学表达式。df['math'] = 10 + df['col3']
In [14]: df
Out[14]:
col1 col2 col3 math
0 A 2 0 10
1 A 1 1 11
2 B 9 9 19
3 NaN 8 4 14
4 D 7 2 12
5 C 4 3 13
但我想不通的是如何将表达式与另一列的值进行条件关联(例如,仅当
col1 == B
时)。期望的输出结果应该是:In [14]: df
Out[14]:
col1 col2 col3 math
0 A 2 0 NaN
1 A 1 1 NaN
2 B 9 9 19
3 NaN 8 4 NaN
4 D 7 2 NaN
5 C 4 3 NaN
为了更清楚地阐述,我将在
for循环
中使用一个变量来表示col1
的值。因此,我无法按照这里或这里描述的那样使.group_by()
起作用。我想我需要像这样的东西...df['math'] = 10 + df.loc[[df['col1'] == my_var], 'col3']
我从上面第二个示例的评论中得到了这个代码,但我无法使其工作。它会抛出一个“ValueError”,因为有太多的值——也就是说,我正在尝试同时传递过滤器和操作列,但它只期望过滤器。这个 Stack Overflow 帖子也使用类似于我上面的表达式的“loc”——但是使用静态的“col1”。
df.loc[:,'math'] = 10 + df.loc[df['col1'] == "B", 'col3']
。 - rafaelcdf['math']
和df.loc[:, 'math']
之间有什么区别? - Bill Armstrong