pandas 根据条件向 Dataframe 添加行

f0ofjuux  于 2022-12-21  发布在  其他
关注(0)|答案(2)|浏览(141)

我有一张日期表和一个条件:

Start       End         Condition
03.10.2022  03.10.2022  0
03.10.2022  04.10.2022  1
03.10.2022  03.10.2022  0

如何根据条件添加和转换附加行,如下所示:

Start       End         
03.10.2022  03.10.2022  
03.10.2022  03.10.2022
04.10.2022  04.10.2022  
03.10.2022  03.10.2022

我的想法是使用pd.explode-所以首先我需要添加一个包含值列表的新列。
我试过类似这样的方法,结果出现了形状错误:

df["new_col"] = np.where(df['Condition'] == 1, 
                         df[['Start', 'End']].values.tolist(),
                         df['Start'])
kgsdhlau

kgsdhlau1#

这是我想到的

# df initialization
data = pd.to_datetime('2022/10/03')
df = pd.DataFrame({'start':[data]*3,'end'[data,data+pd.DateOffset(days=1),data],'condition':[0,1,0]})

# find the rule used to add new rows
s = (df.end - df.start).dt.days * df.condition +1

#repeat index
df = df.loc[df.index.repeat(s)].copy()

# system datetimes
add = pd.to_timedelta(df.groupby(level=0).cumcount(), unit='d')
df['start'] = df["start"].add(add)
df['end'] = df["start"]

#default index
df = df.reset_index(drop=True)
8e2ybdfx

8e2ybdfx2#

如果你的表格是csv格式,你可以利用Pandas图书馆来读取和提取信息。

import pandas as pd

df = pd.read_csv('table.csv')
df2 = df.iloc[:, 0:2] # remove the unwanted column in the dataframe
df2.loc[len(df.index)] = ['03.10.2022','03.10.2022'] # add a new row to the dataframe

瞧,df2就是你想要的 Dataframe 。

相关问题