Wal*_*eed 6 python group-by duplicates pandas
如果该行符合条件,我将尝试创建一个重复行。在下表中,我根据groupby创建了一个累积计数,然后对groupby的MAX进行了另一次计算。
df['PathID'] = df.groupby(DateCompleted).cumcount() + 1
df['MaxPathID'] = df.groupby(DateCompleted)['PathID'].transform(max)
Date Completed PathID MaxPathID
1/31/17 1 3
1/31/17 2 3
1/31/17 3 3
2/1/17 1 1
2/2/17 1 2
2/2/17 2 2
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我只想复制2/1/17的记录,因为该日期只有一个实例(即MaxPathID == 1)。
所需输出:
Date Completed PathID MaxPathID
1/31/17 1 3
1/31/17 2 3
1/31/17 3 3
2/1/17 1 1
2/1/17 1 1
2/2/17 1 2
2/2/17 2 2
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我认为您需要unique先获取行Date Completed,然后concat获取原始行:
df1 = df.loc[~df['Date Completed'].duplicated(keep=False), ['Date Completed']]
print (df1)
Date Completed
3 2/1/17
df = pd.concat([df,df1], ignore_index=True).sort_values('Date Completed')
df['PathID'] = df.groupby('Date Completed').cumcount() + 1
df['MaxPathID'] = df.groupby('Date Completed')['PathID'].transform(max)
print (df)
Date Completed PathID MaxPathID
0 1/31/17 1 3
1 1/31/17 2 3
2 1/31/17 3 3
3 2/1/17 1 2
6 2/1/17 2 2
4 2/2/17 1 2
5 2/2/17 2 2
Run Code Online (Sandbox Code Playgroud)
编辑:
print (df)
Date Completed a b
0 1/31/17 4 5
1 1/31/17 3 5
2 1/31/17 6 3
3 2/1/17 7 9
4 2/2/17 2 0
5 2/2/17 6 7
df1 = df[~df['Date Completed'].duplicated(keep=False)]
#alternative - boolean indexing by numpy array
#df1 = df[~df['Date Completed'].duplicated(keep=False).values]
print (df1)
Date Completed a b
3 2/1/17 7 9
df = pd.concat([df,df1], ignore_index=True).sort_values('Date Completed')
print (df)
Date Completed a b
0 1/31/17 4 5
1 1/31/17 3 5
2 1/31/17 6 3
3 2/1/17 7 9
6 2/1/17 7 9
4 2/2/17 2 0
5 2/2/17 6 7
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3886 次 |
| 最近记录: |