Pandas 定位并应用对列的更改
Pandas locate and apply changes to column
这是我一直在努力解决的问题,而且是非常初学者。本质上,我想根据来自另一列的筛选器找到一个列并将更改应用到该列。
示例输入。
import pandas as pd
cols = ['col1', 'col2']
data = [
[1, 1],
[1, 1],
[2, 1],
[1, 1],
]
df = pd.DataFrame(data=data, columns=cols)
# NOTE: In practice, I will be applying a more complex function
df['col2'] = df.loc[df['col1'] == 1, 'col2'].apply(lambda x: x+1)
返回输出:
col1 col2
0 1 2.0
1 1 2.0
2 2 NaN
3 1 2.0
预期输出:
col1 col2
0 1 2
1 1 2
2 2 2
3 1 2
发生了什么:
由于我的apply/lambda例程,不符合过滤条件的记录被设置为空
我的要求:
正确的 locate/filter 和应用方法。我可以使用更新实现预期的帧,但是我想使用定位和应用。
通过执行 df['col2'] = ...
,您正在设置 所有 col2
的值。但是,由于您仅对 一些 值调用 apply
,因此未包含的值将设置为 NaN。要解决此问题,请保存您的面具并重新使用它:
mask = df['col1'] == 1
df.loc[mask, 'col2'] = df.loc[mask, 'col2'].apply(lambda x: x+1)
输出:
>>> df
col1 col2
0 1 2
1 1 2
2 2 1
3 1 2
这是我一直在努力解决的问题,而且是非常初学者。本质上,我想根据来自另一列的筛选器找到一个列并将更改应用到该列。
示例输入。
import pandas as pd
cols = ['col1', 'col2']
data = [
[1, 1],
[1, 1],
[2, 1],
[1, 1],
]
df = pd.DataFrame(data=data, columns=cols)
# NOTE: In practice, I will be applying a more complex function
df['col2'] = df.loc[df['col1'] == 1, 'col2'].apply(lambda x: x+1)
返回输出:
col1 col2
0 1 2.0
1 1 2.0
2 2 NaN
3 1 2.0
预期输出:
col1 col2
0 1 2
1 1 2
2 2 2
3 1 2
发生了什么:
由于我的apply/lambda例程,不符合过滤条件的记录被设置为空
我的要求:
正确的 locate/filter 和应用方法。我可以使用更新实现预期的帧,但是我想使用定位和应用。
通过执行 df['col2'] = ...
,您正在设置 所有 col2
的值。但是,由于您仅对 一些 值调用 apply
,因此未包含的值将设置为 NaN。要解决此问题,请保存您的面具并重新使用它:
mask = df['col1'] == 1
df.loc[mask, 'col2'] = df.loc[mask, 'col2'].apply(lambda x: x+1)
输出:
>>> df
col1 col2
0 1 2
1 1 2
2 2 1
3 1 2