我是Python新手,在使用EXCEL进行 Dataframe 操作时遇到了一个问题:下面是Excel的一个片段:
我能够删除datetime行的重复项,得到一个只包含datetime行的 Dataframe 和另一个只包含描述的 Dataframe ;我还可以删除最后一行:
我想做的是将带有日期的A列“移位”到上面一行的B列。如果两个 Dataframe 都是1-1,这很容易,但我有一行(黄色),没有任何日期时间以下。有人知道怎么做吗?变成这样第一个
kmbjn2e31#
下面是一个使用标准pandas frame's函数的命题:
pandas frame's
import pandas as pd import numpy as np def flag_delete(df): df.insert(0, "temp_col", df.groupby("Col_A")["Col_A"].transform("count")) df.loc[df.pop("temp_col").eq(1), df.columns!="Col_A"] = "DELETE" return df def format_dates(df): temp_df = df.select_dtypes('datetime64') df[temp_df.columns] = temp_df.apply(lambda x: x.dt.strftime('%d-%b-%Y')) return df df= ( pd.read_excel("BrunoA.xlsx", header=None, dtype=str) .assign(Col_A= lambda x: pd.Series(np.where(~x[0].str.contains("\d{4}-\d{2}-\d{2}", regex=True), x[0], np.NaN)).ffill(), Col_B= lambda x: np.where(x[0].str.contains("\d{4}-\d{2}-\d{2}", regex=True), x[0], np.NaN)) .drop(columns=0) .drop_duplicates() .apply(lambda _: pd.to_datetime(_, format='%Y-%m-%d', errors="ignore")) .pipe(format_dates) .pipe(flag_delete) .dropna() .rename(columns={"Col_A": -1, "Col_B": 0}) .sort_index(axis=1) .reset_index(drop=True) ) display(df)
1条答案
按热度按时间kmbjn2e31#
下面是一个使用标准
pandas frame's
函数的命题:#输出: