如何从 pandas 中的嵌套重复项中提取信息?
How do I extract information from nested duplicates in pandas?
我正在尝试从重复项中提取信息。
data = np.array([[100,1,0, 'GB'],[100,0,1, 'IT'],[101,1,0, 'CN'],[101,0,1, 'CN'],
[102,1,0, 'JP'],[102,0,1, 'CN'],[103,0,1, 'DE'],
[103,0,1, 'DE'],[103,1,0, 'VN'],[103,1,0, 'VN']])
df = pd.DataFrame(data, columns = ['wed_cert_id','spouse_1',
'spouse_2', 'nationality'])
我想将每场婚礼归类为跨国或非跨国婚礼。
在我的实际数据集中,一个婚姻可以有超过2个配偶。
我的目标是获得这样的数据框:
或者像这样:
我试图找到一种方法来使用 .duplicated() 过滤数据并尝试使用 not 运算符拒绝 .duplicated(),但没有成功:
df = df.loc[df.wed_cert_id.duplicated(keep=False) ~df.nationality.duplicated(keep=False), :]
df = df.loc[df.wed_cert_id.duplicated(keep=False) not df.nationality.duplicated(keep=False), :]
删除重复项会删除太多观察结果。我的数据集允许每个婚礼超过 2 个配偶,从而产生重复的可能性:
df.drop_duplicates(subset=['wed_cert_id','nationality'], keep=False, inplace=True)
我该怎么做?
从现在开始非常感谢
我相信你需要:
df['cross_national'] = (df.groupby('wed_cert_id')['nationality']
.transform('nunique').gt(1).view('i1'))
print(df)
或者:
df['cross_national'] = (df.groupby('wed_cert_id')['nationality']
.transform('nunique').gt(1).view('i1')
.mul(df[['spouse_1','spouse_2']].prod(1)))
print(df)
wed_cert_id spouse_1 spouse_2 nationality cross_national
0 100 1 0 GB 1
1 100 0 1 IT 1
2 101 1 0 CN 0
3 101 0 1 CN 0
4 102 1 0 JP 1
5 102 0 1 CN 1
6 103 0 1 DE 1
7 103 0 1 DE 1
8 103 1 0 VN 1
9 103 1 0 VN 1
我正在尝试从重复项中提取信息。
data = np.array([[100,1,0, 'GB'],[100,0,1, 'IT'],[101,1,0, 'CN'],[101,0,1, 'CN'],
[102,1,0, 'JP'],[102,0,1, 'CN'],[103,0,1, 'DE'],
[103,0,1, 'DE'],[103,1,0, 'VN'],[103,1,0, 'VN']])
df = pd.DataFrame(data, columns = ['wed_cert_id','spouse_1',
'spouse_2', 'nationality'])
我想将每场婚礼归类为跨国或非跨国婚礼。 在我的实际数据集中,一个婚姻可以有超过2个配偶。
我的目标是获得这样的数据框:
或者像这样:
我试图找到一种方法来使用 .duplicated() 过滤数据并尝试使用 not 运算符拒绝 .duplicated(),但没有成功:
df = df.loc[df.wed_cert_id.duplicated(keep=False) ~df.nationality.duplicated(keep=False), :]
df = df.loc[df.wed_cert_id.duplicated(keep=False) not df.nationality.duplicated(keep=False), :]
删除重复项会删除太多观察结果。我的数据集允许每个婚礼超过 2 个配偶,从而产生重复的可能性:
df.drop_duplicates(subset=['wed_cert_id','nationality'], keep=False, inplace=True)
我该怎么做?
从现在开始非常感谢
我相信你需要:
df['cross_national'] = (df.groupby('wed_cert_id')['nationality']
.transform('nunique').gt(1).view('i1'))
print(df)
或者:
df['cross_national'] = (df.groupby('wed_cert_id')['nationality']
.transform('nunique').gt(1).view('i1')
.mul(df[['spouse_1','spouse_2']].prod(1)))
print(df)
wed_cert_id spouse_1 spouse_2 nationality cross_national
0 100 1 0 GB 1
1 100 0 1 IT 1
2 101 1 0 CN 0
3 101 0 1 CN 0
4 102 1 0 JP 1
5 102 0 1 CN 1
6 103 0 1 DE 1
7 103 0 1 DE 1
8 103 1 0 VN 1
9 103 1 0 VN 1