亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何根據條件從 2 個列表中向 pandas 添加新列

如何根據條件從 2 個列表中向 pandas 添加新列

隔江千里 2023-07-05 17:42:43
我有一個熊貓數據框import pandas as pddf = 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_adf[df.index.isin(index_list_b)]['col_f'] = value_list_b
查看完整描述

3 回答

?
阿晨1998

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


查看完整回答
反對 回復 2023-07-05
?
白豬掌柜的

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


查看完整回答
反對 回復 2023-07-05
?
holdtom

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


查看完整回答
反對 回復 2023-07-05
  • 3 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號