我正在对数据文件执行一个特定的操作。考虑到以下数据:
df1 = pd.DataFrame({
'id': [0, 1, 2, 1, 3, 0],
'letter': ['a','b','c','b','b','a'],
'status':[0,1,0,0,0,1]})
id letter status
0 a 0
1 b 1
2 c 0
1 b 0
3 b 0
0 a 1我想要创建另一个数据based,它包含基于以下限制的来自df1的行。
如果两个或更多行具有相同的id和字母,则返回状态为1的任何一行。所有其他行都必须复制。
结果的dataframe应该如下所示:
id letter status
0 a 1
1 b 1
2 c 0
3 b 0任何帮助都是非常感谢的。谢谢
发布于 2014-04-02 21:41:08
这应该是可行的:
>>> fn = lambda obj: obj[obj.status == 1] if any(obj.status == 1) else obj
>>> df.groupby(['id', 'letter'], as_index=False).apply(fn)
id letter status
5 0 a 1
1 1 b 1
2 2 c 0
4 3 b 0
[4 rows x 3 columns]发布于 2017-10-14 14:21:59
先按status排序,然后使用groupby
In [1932]: df.sort_values(by='status').groupby('id', as_index=False).last()
Out[1932]:
id letter status
0 0 a 1
1 1 b 1
2 2 c 0
3 3 b 0https://stackoverflow.com/questions/22823559
复制相似问题