循环遍历每一行并写入ID(如果它存在于list - pandas中)

时间:2018-05-06 21:10:13

标签: python pandas dataframe

我想创建一个名为'LT'的新列,如果列表lt中存在该ID,则该列包含ID中的值:

数据框转换为列表:

ltlist = [1, 2, 3, 4, 5]

是数据框:

org = Dataframe({ID: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10})
for i, row in org.iterrows():
    blank = 0
    lt_val = org.at[i,'ID']
    if lt_val in ltlist:
        lt_val = org.ID
    org.at[i,'LT',] = lt_val
    else:
        blank

2 个答案:

答案 0 :(得分:0)

import numpy as np
import pandas as pd 

ltlist = [1, 2, 3, 4, 5]

org = pd.DataFrame({'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})

LT_val = []
for i, elements in org.items():
     for element in elements:
        if element in ltlist:
             LT_val.append(element)

        else:
             LT_val.append('NaN')

org['LT'] = LT_val
print(org)

我们可以运行一个for循环来迭代列中的每一列和值。由于您只有一列,它将遍历id列和该列中的元素。我使用.items()方法来获取每个元素。如果元素在ltlist中,我们可以将它附加到名为LT_val的空列表中。如果元素不在ltlist中,我们可以使用numpy的np.nan函数将LT_val附加到nan值。最后,我们在数据框中创建了一个名为' LT'它将存储原始列表中的每个ID,并将为不在原始列表中的每个ID创建NaN值。

   ID   LT
0   1    1
1   2    2
2   3    3
3   4    4
4   5    5
5   6  NaN
6   7  NaN
7   8  NaN
8   9  NaN
9  10  NaN

答案 1 :(得分:-1)

您可以使用if以矢量化方式实施else / numpy.where

import pandas as pd, numpy as np

ltlist = [1, 2, 3, 4, 5]
org = pd.DataFrame({'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})

ltlist_set = set(ltlist)
org['LT'] = np.where(org['ID'].isin(ltlist_set), org['ID'], 0)

我们使用set来获得O(1)查找效率。