给出以下数据框
InitilizeComponent()
最终目标是合并按名称分组的数据框并根据某些规则,例如
bigQueryR
是字符串而另一个是df = pd.DataFrame({
'identifier': ['1', '2', None],
'name': ['Tom', 'Peter', 'Peter'],
'registered': [True, False, True]
})
,则使用字符串identifier
None
条目执行逻辑identifier
所以结果看起来应该是
or
我用registered
尝试过,但也许这是错误的方式?
drop_duplicates
不要让我添加具体规则。
答案 0 :(得分:1)
我认为您需要使用dropna
,drop_duplicates
和any
自定义功能:
df = pd.DataFrame({
'identifier': ['1', '2', None, '2'],
'name': ['Peter', 'Peter', 'Peter', 'Peter'],
'registered': [True, False, True, True]
})
print (df)
identifier name registered
0 1 Peter True
1 2 Peter False
2 None Peter True
3 2 Peter True
def f(x):
return pd.DataFrame({'identifier': x['identifier'].dropna().drop_duplicates(),
'registered': x['registered'].any()})
df = df.groupby('name').apply(f).reset_index(level=1, drop=True).reset_index()
print (df)
name identifier registered
0 Peter 1 True
1 Peter 2 True
答案 1 :(得分:1)
让我们稍微修改一下你的数据。
df = pd.DataFrame({
'identifier': ['1', None, '2'],
'name': ['Tom', 'Peter', 'Peter'],
'registered': [True, False, True]
})
df
identifier name registered
0 1 Tom True
1 None Peter False
2 2 Peter True
“无”是“彼得”的第一个标识符。您可以通过sort_values
来电来解决此问题,然后拨打groupby
+ agg
。
df.sort_values(['identifier'])\
.groupby('name', as_index=False)\
.agg({'identifier' : 'first', 'registered' : any})
name registered identifier
0 Peter True 2
1 Tom True 1