Python 基于现有列值计算新列
请参见以上我的源表: 我有兴趣根据感兴趣地块列表计算新列“组”: 如果“Lot”列中的源表中的批次存在于感兴趣的批次中,则根据条件确定“Group”列的值。如果不正确,“组”列中的值将从“LOT\U虚拟线”单元复制 期望输出:Python 基于现有列值计算新列,python,pandas,Python,Pandas,请参见以上我的源表: 我有兴趣根据感兴趣地块列表计算新列“组”: 如果“Lot”列中的源表中的批次存在于感兴趣的批次中,则根据条件确定“Group”列的值。如果不正确,“组”列中的值将从“LOT\U虚拟线”单元复制 期望输出: 假设我们有一个名为感兴趣地段的列表,例如作为读取csv(路径)的结果。loc[:,'lots\u of\u interest']。tolist(): 因为这个问题被标记为Pandas,所以我假设我们讨论的是数据帧和序列,而不是简单的列表。您可以使用loc定位符合您标准的
假设我们有一个名为
感兴趣地段的列表
,例如作为读取csv(路径)的结果。loc[:,'lots\u of\u interest']。tolist()
:
因为这个问题被标记为Pandas,所以我假设我们讨论的是数据帧和序列,而不是简单的列表。您可以使用loc
定位符合您标准的行和列(例如LOT
列isin
系列感兴趣的批次
)
不要包括图像(无法复制和粘贴),请包括纯文本(可以)。非常感谢你,Stefan。如果感兴趣的部分是从csv文件中读取的数据帧?pd.read\u csv(“C:/Users/fdoktorm/Documents/Databases/SQL Pathfinder/Startup Integration Toolkit/Examples For Development/LotsOfInterest.csv”).loc[:,“LotsOfInterest”]。to\u list()给出错误:(键入(self)。\uu name\uuuuuuuuuuu,name))AttributeError:“Series”对象没有属性“to\u list”抱歉,这是.tolist()
。谢谢,现在在lambda函数行中出现以下错误:AttributeError:(“'str'对象没有属性'isin',u'出现在索引0上”)修复了LotsOfInterest语句中的if x['SPC\u LOT']。非常感谢你,Stefan。非常感谢你,亚历山大。您能告诉我如何阅读csv文件,该文件包含熊猫系列的一列吗?谢谢,请给我看一下pd.read\u csv('full\u path\u to\u filename')
的前两个和后两个输出列表,其中full\u path\u to\u filename就是这个。
df['Group'] = df.apply(lambda x: x['LOT'] if x['LOT'].isin(lots_of_interest) else x['LOT_VIRTUAL_LINE'], axis=1)
df = pd.DataFrame({'LOT': ['A1111', 'A2222', 'A3333', 'B1111', 'B2222', 'B3333'],
'LOT_VIRTUAL_LINE': ['AAA'] * 3 + ['BBB'] * 3})
s = pd.Series(['A1111', 'B2222'], name='Lots Of Interest')
# or... df2 = pd.read_csv('file_path/file_name.csv')
# Value of 'GROUP' defaults to 'LOT_VIRTUAL_LINE'.
df['GROUP'] = df.LOT_VIRTUAL_LINE
# But gets overwritten by 'LOT' if it is in the 'Lots of Interest' series.
mask = df.LOT.isin(s)
# or... mask = df.LOT.isin(df2['Lots of Interest']) # Whatever the column name is.
df.loc[mask, 'GROUP'] = df.loc[mask, 'LOT']
# Confirm results.
>>> df
LOT LOT_VIRTUAL_LINE GROUP
0 A1111 AAA A1111
1 A2222 AAA AAA
2 A3333 AAA AAA
3 B1111 BBB BBB
4 B2222 BBB B2222
5 B3333 BBB BBB