3 回答

TA貢獻2037條經驗 獲得超6個贊
你可以試試:
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)
col_a col_b colF
0 1 2 a
1 2 3 b
2 3 4 c

TA貢獻1893條經驗 獲得超10個贊
這不是最有效的方法,但它非??勺x且易于遵循:
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

TA貢獻1805條經驗 獲得超10個贊
首先,您必須更改分配部分以使用 loc 并為 col_f 添加占位符
df['col_f'] = np.nan
df.loc[df.index.isin(index_list_a),"col_f"] = value_list_a
其次我認為你有錯誤。你的代碼有索引[1,3],但python從0開始。
index_list_a = [0,2]
value_list_a = ['a', 'c']
import pandas as pd
import numpy as np
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 = [2]
value_list_b = ['b']
df['col_f'] = np.nan
df.loc[df.index.isin(index_list_a),"col_f"] = value_list_a
但是如果你想要一個通用的解決方案并且 [1,3] 是故意的,你可以使用下面的函數
def create_intersect(x,y,z):
common = list(set(x).intersection(set(y)))
for i in range(len(y)):
if y[i] not in common:
y.pop(i); z.pop(i);
return y,z
這允許您預先消除數據框中不存在的任何索引
import pandas as pd
import numpy as np
def create_intersect(x,y,z):
common = list(set(x).intersection(set(y)))
for i in range(len(y)):
if y[i] not in common:
y.pop(i); z.pop(i);
return y,z
df = pd.DataFrame({'col_a' : [1,2,3], 'col_b':[2,3,4]})
index_list_a,value_list_a = create_intersect(df.index, [1,3], ['a', 'c'])
df['col_f'] = np.nan
df.loc[df.index.isin(index_list_a),"col_f"] = value_list_a
添加回答
舉報