“这个想法是遍历行和检查“日期”列中的行值是否与任何列名匹配df['date'] == column,如果确实如此,那么交叉点的值应该保留并且它之后的所有值df.columns[(idx+1):] 应替换为 null 或 0's 。”
for idx, column in enumerate(df.columns):
df.loc[df['date'] == column, df.columns[(idx+1):]]=None
enumerate() function 向可迭代对象添加了一个计数器。
解释:
df.columns = ["date", "2022-01-01 23:55:00+01:00", "2022-01-02 00:00:00+01:00", "2022-01-02 00:05:00+01:00", ...]
list(enumerate(df.columns))
# return
[(0, "date"), (1, "2022-01-01 23:55:00+01:00"), (2, "2022-01-02 00:00:00+01:00"), (3, "2022-01-02 00:05:00+01:00"), ...]
在 for 循环中,第一次 (0, "date") 和第二次迭代 (1, "2022-01-01 23:55:00+01:00") 与任何行都不匹配。第三次迭代与第一行匹配。以此为例
idx, column = 2, "2022-01-02 00:00:00+01:00"
df['date'] == column 返回布尔值列表 [True, False, False, False, ...]
df.columns[(idx+1):]是df.columns[3:],它返回"2022-01-02 00:00:00+01:00"之后的列名列表,即["2022-01-02 00:05:00+01:00", "2022-01-02 00:10:00+01:00", ...]
df.loc[df['date'] == column, df.columns[(idx+1):]]=None
相当于
df.loc[[True, False, False, ...], ["2022-01-02 00:05:00+01:00", "2022-01-02 00:10:00+01:00", ...]]=None
它将第一行和"2022-01-02 00:00:00+01:00"之后的列填充为None。