我有一个数据帧,如下所示。首先,它们具有三列'Parse/PFFile.h' file not found
。我想添加一列基于标志和日期的列,这意味着当我第一天在第一天获得find Pods -name PFFile.h
时,此行目标为('date','time','flag')
,今天的另一目标为{{1 }}。
flag=1
答案 0 :(得分:1)
用1
比较DataFrameGroupBy.cumsum
,并用flag
将1
和bitwise AND
比较df['target1'] = (df.groupby('date')['flag'].cumsum().eq(1) & df['flag'].eq(1)).astype(int)
date time flag target target1
0 2017/4/10 10:00:00 0 0 0
1 2017/4/10 11:00:00 1 1 1
2 2017/4/10 12:00:00 0 0 0
3 2017/4/10 13:00:00 0 0 0
4 2017/4/10 14:00:00 0 0 0
5 2017/4/11 10:00:00 1 1 1
6 2017/4/11 11:00:00 0 0 0
7 2017/4/11 12:00:00 1 0 0
8 2017/4/11 13:00:00 1 0 0
9 2017/4/11 14:00:00 0 0 0
10 2017/4/12 10:00:00 0 0 0
11 2017/4/12 11:00:00 0 0 0
12 2017/4/12 12:00:00 0 0 0
13 2017/4/12 13:00:00 0 0 0
14 2017/4/12 14:00:00 0 0 0
15 2017/4/13 10:00:00 0 0 0
16 2017/4/13 11:00:00 1 1 1
17 2017/4/13 12:00:00 0 0 0
18 2017/4/13 13:00:00 1 0 0
19 2017/4/13 14:00:00 0 0 0
并转换为整数:
df['target1'] = ((~df.loc[df['flag']==1, 'date'].duplicated())
.reindex(df.index, fill_value=False).astype(int))
另一种解决方案:
np.savetxt(newfolder + '\\' + filename + '.csv', mzplist)
答案 1 :(得分:0)
首先选择每个日期的flag = 1的头一个记录,并将目标设置为1
df1 = df[df.flag==1].groupby("date").head(1);
df1.target = 1
然后将原始数据帧的目标重置为0,并用新创建的数据帧替换目标值,仅对于在第一个数据帧中选择的那些记录,将目标值重置为1。
df.target = 0
df.update(df1.target)
答案 2 :(得分:0)
这是易于理解和使用的答案:
m=f[['date','flag']]
i=m[m.flag==1].drop_duplicates().index
f['target']=0
f['target'].iloc[i]=1
print(f.drop(columns={'index'})
输出:
date time flag target
0 2017/4/10 10:00:00 0 0
1 2017/4/10 11:00:00 1 1
2 2017/4/10 12:00:00 0 0
3 2017/4/10 13:00:00 0 0
4 2017/4/10 14:00:00 0 0
5 2017/4/11 10:00:00 1 1
6 2017/4/11 11:00:00 0 0
7 2017/4/11 12:00:00 1 0
8 2017/4/11 13:00:00 1 0
9 2017/4/11 14:00:00 0 0
10 2017/4/12 10:00:00 0 0
11 2017/4/12 11:00:00 0 0
12 2017/4/12 12:00:00 0 0
13 2017/4/12 13:00:00 0 0
14 2017/4/12 14:00:00 0 0
15 2017/4/13 10:00:00 0 0
16 2017/4/13 11:00:00 1 1
17 2017/4/13 12:00:00 0 0
18 2017/4/13 13:00:00 1 0
19 2017/4/13 14:00:00 0 0
答案 3 :(得分:0)
Oneliner:
# Assuming your `df` doesn't have target in the first place
df['target'] = 0
df.loc[df[df.flag==1].drop_duplicates('date').index, 'target'] = 1