我想创建一个名为'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
答案 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)查找效率。