我是python的新手,但我不知所措。
我有一个看起来像这样的数据框:
import pandas as pd
df = pd.DataFrame({'cityyear': ['chicago1990', 'detroit2000', 'detroit1999', 'chicago1999', 'detroit1990'],
'name1': ['hayden', 'charles', 'daniel', 'james', 'hayden']
'name2': ['mary', 'mary', 'john',NaN, NaN]
'name3': ['edward', 'reynolds', 'paula', NaN, NaN]
'name4': ['charles', 'louse', 'reynolds', NaN, NaN]
'name5': ['allan', 'william', 'romulus', NaN, NaN]
'name6': ['edmund', 'elizabeth', 'edmund', NaN, NaN]
'name7':['jane', NaN, 'william', NaN, NaN]})
我想找到在“ name”开头的列中出现相同名称的时刻,然后返回两个城市年份,因此它看起来像这样:
newdf=pd.DataFrame({'newcityyear': ['detroit2000','detroit2000'],
'newcityear2': ['chicago1990', 'detroit1999'],
'duplicatename1': ['charles', 'reynolds'],
'duplicatename2': ['mary', 'william']})
我主要不知道如何找到多列中的重复项。我已经开始这样做:
mask= df[['name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7']].mask(df.duplicated(['name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7']))
这不起作用。
但这不是:
df[df.duplicated(['name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7'], keep=False)]
有帮助吗?我什至不知道如何处理这样一个事实,即我拥有不想重复的NaN值。但是也无法弄清楚如何在多个列中查找重复项。
df = df.set_index(['cityyear']).unstack(['cityyear']).reset_index()
df = df[df[0].notnull()]
df = df[df.duplicated(subset = [0],keep=False)].sort_values([0])
df = df.groupby(['cityyear'])[0].agg(list).reset_index()
df.join(pd.DataFrame(df[0].tolist(),index=df.index).add_prefix('duplicatename'))
cityyear duplicatename0 duplicatename1 duplicatename2 duplicatename3
0 chicago1990 charles edmund hayden mary
1 detroit1990 hayden None None None
2 detroit1999 edmund reynolds william None
3 detroit2000 charles mary reynolds william