根据其他列的条件添加和更新 pandas 列
Adding and updating a pandas column based on conditions of other columns
所以我有一个超过 100 万行的数据框
一个名为 'activity' 的列,其中包含 1 - 12 之间的数字。
我添加了一个名为 'label'
的新空列
'label'列需要根据'activity'
列的值填充0或1
所以如果activity是1,2,3,6,7,8标签会是0,否则就是1
这是我目前正在做的事情:
df = pd.read_csv('data.csv')
df['label'] = ''
for index, row in df.iterrows():
if (row['activity'] == 1 or row['activity'] == 2 or row['activity'] == 3 or row['activity'] == 6 row['activity'] == 7 or row['activity'] == 8):
df.loc[index, 'label'] == 0
else:
df.loc[index, 'label'] == 1
df.to_cvs('data.csv', index = False)
这是非常低效的,并且 运行 花费的时间太长。有什么优化吗?可能使用 numpy 数组?有什么方法可以使代码更简洁?
使用numpy.where
with Series.isin
:
df['label'] = np.where(df['activity'].isin([1, 2, 3, 6, 7, 8]), 0, 1)
或True, False
通过反转掩码映射到0, 1
:
df['label'] = (~df['activity'].isin([1, 2, 3, 6, 7, 8])).astype(int)
所以我有一个超过 100 万行的数据框
一个名为 'activity' 的列,其中包含 1 - 12 之间的数字。 我添加了一个名为 'label'
的新空列'label'列需要根据'activity'
列的值填充0或1所以如果activity是1,2,3,6,7,8标签会是0,否则就是1
这是我目前正在做的事情:
df = pd.read_csv('data.csv')
df['label'] = ''
for index, row in df.iterrows():
if (row['activity'] == 1 or row['activity'] == 2 or row['activity'] == 3 or row['activity'] == 6 row['activity'] == 7 or row['activity'] == 8):
df.loc[index, 'label'] == 0
else:
df.loc[index, 'label'] == 1
df.to_cvs('data.csv', index = False)
这是非常低效的,并且 运行 花费的时间太长。有什么优化吗?可能使用 numpy 数组?有什么方法可以使代码更简洁?
使用numpy.where
with Series.isin
:
df['label'] = np.where(df['activity'].isin([1, 2, 3, 6, 7, 8]), 0, 1)
或True, False
通过反转掩码映射到0, 1
:
df['label'] = (~df['activity'].isin([1, 2, 3, 6, 7, 8])).astype(int)