。csv文件中某列下的一行包含1,则另一列中的同一行应使用python覆盖,否则应保留为空

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

我有一个约有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")

我不介意该解决方案是否适用于一列,而对于其他列也适用。它不必一次全部使用。

这应该是它的外观

enter image description here

谢谢

python pandas csv multiple-columns rows
2个回答
0
投票
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


0
投票

更多的pandasonic解决方案(而不是循环,条件列表和loc),实际上基于Numpy是:

df['Attendance'] = np.select([df.Present == 1, df.Online == 1, df.Absent == 1],
    choicelist = ['present', 'online', 'absent'], default = '')

有关详细信息,请参见np.select的文档。

© www.soinside.com 2019 - 2024. All rights reserved.