Python 如何根据条件向2个列表中的熊猫添加新列

Python 如何根据条件向2个列表中的熊猫添加新列,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个熊猫数据框 import pandas as pd df = pd.DataFrame({'col_a' : [1,2,3], 'col_b':[2,3,4]}) 我还列出了4个清单: index_list_a = [0,2] value_list_a = ['a', 'c'] index_list_b = [1] value_list_b = ['b'] 我想在df中添加一个新列,它将从value_list_a或value_list_b中获取值,具体取决于索引是在index_li

我有一个熊猫数据框

import pandas as pd
df = pd.DataFrame({'col_a' : [1,2,3], 'col_b':[2,3,4]})
我还列出了4个清单:

index_list_a = [0,2]
value_list_a = ['a', 'c']

index_list_b = [1]
value_list_b = ['b']
我想在df中添加一个新列,它将从value_list_a或value_list_b中获取值,具体取决于索引是在index_list_a还是index_list_b中

我试过这个,但不起作用:

df[df.index.isin(index_list_a)]['col_f'] = value_list_a
df[df.index.isin(index_list_b)]['col_f'] = value_list_b
您可以尝试:

s =pd.Series(dict(zip(index_list_a+index_list_b,value_list_a+value_list_b)),name='colF')
#s=pd.Series(data=value_list_a+value_list_b,index=index_list_a+index_list_b,name='colF')
out = df.join(s)

这不是最有效的方法,但它可读性强,易于理解:

import pandas as pd

df = pd.DataFrame({'col_a' : [1,2,3], 'col_b':[2,3,4]})

index_list_a = [0,2]
value_list_a = ['a', 'c']

index_list_b = [1]
value_list_b = ['b']


for index, value in zip(
    index_list_a + index_list_b,
    value_list_a + value_list_b
):
    df.loc[index, 'col_f'] = value
    
print(df)
   col_a  col_b col_f
0      1      2     a
1      2      3     b
2      3      4     c
正如@Shubham Sharma所指出的那样,这是一个线性和更有效的版本:

df.loc[index_list_a + index_list_b, 'col_f'] =  value_list_a + value_list_b

首先,您必须将分配零件更改为使用loc,并为col\u f放置一个占位符

df['col_f']=np.nan df.loc[df.index.isinindex\u list\u a,col\u f]=值\u list\u a 第二,我认为你错了。代码有索引[1,3],但python从0开始

索引列表a=[0,2] 值\u列表\u a=['a','c'] 作为pd进口熊猫 将numpy作为np导入 数据帧{'col_a':[1,2,3],'col_b':[2,3,4]} 索引列表a=[0,2] 值\u列表\u a=['a','c'] 索引_列表_b=[2] 值\u列表\u b=['b'] df['col_f']=np.nan df.loc[df.index.isinindex\u list\u a,col\u f]=值\u list\u a 但是如果您想要一个通用的解决方案,并且[1,3]是有意的,那么您可以使用下面的函数

定义创建交叉点X、y、z: common=listsetx.intersectionsety 对于我在兰格莱尼: 如果y[i]不相同: y、 波比;z、 波比; 返回y,z 这允许您消除之前数据帧中不存在的任何索引

作为pd进口熊猫 将numpy作为np导入 定义创建交叉点X、y、z: common=listsetx.intersectionsety 对于我在兰格莱尼: 如果y[i]不相同: y、 波比;z、 波比; 返回y,z 数据帧{'col_a':[1,2,3],'col_b':[2,3,4]} 索引\u列表\u a,值\u列表\u a=create\u intersectdf.index[1,3],'a','c'] df['col_f']=np.nan df.loc[df.index.isinindex\u list\u a,col\u f]=值\u list\u a
输出是什么?注意索引从0开始。@alec_djinn你是对的,我编辑了它
df.loc[index_list_a + index_list_b, 'col_f'] =  value_list_a + value_list_b