我有一个约有300,000行的.csv文件。我已经手动创建了一个新列,但我希望从一些较旧的列中提取信息,但是由于文件的长度,我无法手动执行此操作。较旧的列的标题为“当前”,“在线”,“缺席”,新列为“出勤”。较旧的列的值为1和0,其中观察值为true或false,即,如果观察到事件,则“ Present”列的值为1,如果有其他值,则值为0。 “在线”和“缺席”列。
我希望新列从较旧的列中获取信息,即,如果任何较旧的列的值为1,则“出勤”中的同一行的值应为“当前”,“在线”或“缺席”取决于实际情况。我一直在尝试使用Pandas进行此操作,但是还没有找到一种适用于.csv文件的方法。
for i in f['Present']:
if i == 1:
f['Attendance'].write("present")
我不介意该解决方案是否适用于一列,而对于其他列也适用。它不必一次全部使用。
这应该是它的外观
谢谢
for i in range(len(df)):
if int(df.loc[i, 'present']) == 1:
df.loc[i, 'attend'] = 'present'
elif int(df.loc[i, 'online']) == 1:
df.loc[i, 'attend'] = 'online'
else:
df.loc[i, 'attend'] = 'absent'
您可以遍历数据框的每一行,并根据前三列设置新列的值。
参考https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
更多的pandasonic解决方案(而不是循环,条件列表和loc),实际上基于Numpy是:
df['Attendance'] = np.select([df.Present == 1, df.Online == 1, df.Absent == 1],
choicelist = ['present', 'online', 'absent'], default = '')
有关详细信息,请参见np.select的文档。