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

问题描述 投票:1回答:2

我想创建一个名为'LT'的新列,如果该ID存在于列表lt中,则该列包含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
python pandas dataframe
2个回答
-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)查找效率。


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
© www.soinside.com 2019 - 2024. All rights reserved.