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