pandas - 如何根据条件应用多个过滤条件以将其他列中的值复制到熊猫数据框中的新列中
问题描述
我假设 cols: A,B,C,D,E,F 即如果在 col A == '' 中,则使 new col G = col C,new col H = col D,new col I = col E if in col A !='' & col B == 'some-value' ,make col G=0,col H=0, col I=0.. 尝试使用 np.where 但它只支持两个条件。
def change(dfr):
if (dfr['A']==''):
dfr['G'] = dfr['A']
dfr['H'] = dfr['B']
dfr['I'] = dfr['C']
if ((dfr['A']!='') & (dfr['B']=='some-value')):
dfr['G'] = dfr['A']
dfr['H'] = dfr['B']
dfr['I'] = dfr['C']
if ((dfr['A']!='') & (dfr['B']=='value')):
dfr['G'] = 0
dfr['H'] = 0
dfr['I'] = 0
解决方案
我不确定你是否需要这些if
陈述。您可以使用.loc
来完成此操作。这是一个玩具数据框:
data = pd.DataFrame({"A" : ['a', '', 'f', '4', '', 'z'],
"B" : ['f', 'y', 't', 'u', 'o', '1'],
"C" : ['a', 'b', 'c', 'd', 'e', 'f'],
"G" : [1, 1, 1, 1, 1, 1],
'H' : [6, 6, 6, 6, 6, 6],
"I" : ['q', 'q', 'q', 'q', 'q', 'q']})
data
A B C G H I
0 a f a 1 6 q
1 y b 1 6 q
2 f t c 1 6 q
3 4 u d 1 6 q
4 o e 1 6 q
5 z 1 f 1 6 q
为您要在 B 列中检查的值构建几个参数可能是有意义的:
def change(dfr, b_firstvalue, b_secondvalue):
new_df = dfr.copy()
new_df.loc[new_df['A']=='', 'G'] = new_df['A']
new_df.loc[new_df['A']=='', 'H'] = new_df['B']
new_df.loc[new_df['A']=='', 'I'] = new_df['C']
new_df.loc[((new_df['A']!='') & (new_df['B'] == b_firstvalue)), 'G'] = new_df['A']
new_df.loc[((new_df['A']!='') & (new_df['B'] == b_firstvalue)), 'H'] = new_df['B']
new_df.loc[((new_df['A']!='') & (new_df['B'] == b_firstvalue)), 'I'] = new_df['C']
new_df.loc[((new_df['A']!='') & (new_df['B'] == b_secondvalue)), 'G'] = 0
new_df.loc[((new_df['A']!='') & (new_df['B'] == b_secondvalue)), 'H'] = 0
new_df.loc[((new_df['A']!='') & (new_df['B'] == b_secondvalue)), 'I'] = 0
return new_df
data2 = change(data, '1', 'f')
data2
A B C G H I
0 a f a 0 0 0
1 y b y b
2 f t c 1 6 q
3 4 u d 1 6 q
4 o e o e
5 z 1 f z 1 f
显然,该函数将取决于您要处理的列数。这只是示例问题的解决方案。如果您想用更多列替换值,则可能有更有效的处理方法。
推荐阅读
- java - 使用 Maven 执行器跳过模块
- r - XGBoost 中的 tweedie nloglike 与实际的 nloglike 有何关系?
- webdriver-io - TypeError:无法读取 Runner.run 处未定义的属性“观察”
- python - Django 模型中的多个字段分配
- python - 为什么这个石头剪刀布游戏不起作用?
- c# - 将 int 变量的值从 MainPage.xaml.cs 文件获取到 Xamarin 中的 MainPage.xaml 文件
- linux - Linux - grep 函数
- css - 突出显示链接 a:hover:after 上的动画
- python - 如何使用 tqdm 显示 while 循环的进度?
- c++ - 通过命令行安装 CMake 时出现“No rule to maketarget”