Python 熊猫在列中找到相似的行,根据条件创建新列
我有一个df, 查询主题相同Python 熊猫在列中找到相似的行,根据条件创建新列,python,pandas,Python,Pandas,我有一个df, 查询主题相同 0 WP_77.1 WP_706.1 HPS_1 1 WP_78.1 WP_46.1 HPS_2 2 WP_57.1 WP_26.1 HPS_3 3 WP_57.1 WP_627.1 HPS_4 4 WP_15.1 WP_16.1 HPS_5 5 WP_15.1 WP_17.1 HPS_6 6 WP_15.1 WP_63.1 HPS_7 7 WP_15.1 WP_61.1 HPS_8 8 WP_15.1 WP_56.1 HPS_9 9水电站40.1水电站11.1水电
0 WP_77.1 WP_706.1 HPS_1
1 WP_78.1 WP_46.1 HPS_2
2 WP_57.1 WP_26.1 HPS_3
3 WP_57.1 WP_627.1 HPS_4
4 WP_15.1 WP_16.1 HPS_5
5 WP_15.1 WP_17.1 HPS_6
6 WP_15.1 WP_63.1 HPS_7
7 WP_15.1 WP_61.1 HPS_8
8 WP_15.1 WP_56.1 HPS_9
9水电站40.1水电站11.1水电站10 我试过了
df['query_s'] = df['query'].shift(-1)
df['HPSame_s'] = df['HPSame'].shift(-1)
condition = [(df['query'] == df['query_s'])]
ifTrue = df['HPSame']
ifFalse = df['HPSame_s']
df['match'] = np.where(condition, ifTrue, ifFalse)
这会引发ValueError:值的长度与索引的长度不匹配
我也试过了,但没有达到预期效果
df.loc[(df['query'] == df['query_s']), 'match'] = df['HPSame']
df.loc[(df['query'] != df['query_s']), 'match'] = df['HPSame_s']
我正在寻找的结果是,
df=
查询主题相同匹配
0 WP_77.1 WP_706.1 HPS_1 HPS_1
1 WP_78.1 WP_46.1 HPS_2 HPS_2
2 WP_57.1 WP_26.1 HPS_3 HPS_3
3 WP_57.1 WP_627.1水电站4水电站3
4 WP_15.1 WP_16.1 HPS_5 HPS_5
5水电站15.1水电站17.1水电站6水电站5
6 WP_15.1 WP_63.1水电站7水电站5
7水电站15.1水电站61.1水电站8水电站5
8水电站15.1水电站56.1水电站9水电站5
9 WP_40.1 WP_11.1 HPS_10 HPS_10您可以使用
ffill
:
df['match'] = df['HPSame'].where(df['query'] != df['query'].shift()).ffill()
输出:
query subject HPSame match
0 WP_77.1 WP_706.1 HPS_1 HPS_1
1 WP_78.1 WP_46.1 HPS_2 HPS_2
2 WP_57.1 WP_26.1 HPS_3 HPS_3
3 WP_57.1 WP_627.1 HPS_4 HPS_3
4 WP_15.1 WP_16.1 HPS_5 HPS_5
5 WP_15.1 WP_17.1 HPS_6 HPS_5
6 WP_15.1 WP_63.1 HPS_7 HPS_5
7 WP_15.1 WP_61.1 HPS_8 HPS_5
8 WP_15.1 WP_56.1 HPS_9 HPS_5
9 WP_40.1 WP_11.1 HPS_10 HPS_10
您还可以使用
groupby.transform('first')
,如中所示
df['match'] = (
df.groupby('query')['HPSame'].transform('first')
.reset_index(drop=True)
)
输出
query subject HPSame match
0 WP_77.1 WP_706.1 HPS_1 HPS_1
1 WP_78.1 WP_46.1 HPS_2 HPS_2
2 WP_57.1 WP_26.1 HPS_3 HPS_3
3 WP_57.1 WP_627.1 HPS_4 HPS_3
4 WP_15.1 WP_16.1 HPS_5 HPS_5
5 WP_15.1 WP_17.1 HPS_6 HPS_5
6 WP_15.1 WP_63.1 HPS_7 HPS_5
7 WP_15.1 WP_61.1 HPS_8 HPS_5
8 WP_15.1 WP_56.1 HPS_9 HPS_5
9 WP_40.1 WP_11.1 HPS_10 HPS_10
这回答了你的问题吗?不是真的。我的问题有点不同。嗨,广,我为没有把我的问题说清楚而道歉。你的解决方案和我问问题的方式完全正确。我基本上想要实现的是,“查询WP_15”与“主题WP_16、WP_17、WP_63、WP_61、WP_56”相同,因此它们都应该具有相同的名称HPS_5。此外,在该df下游,WP_16或该集合中的任何一个可以是查询,并且可以具有多个与WP_224、WP_500等相同的主题,这些主题也应该具有相同的名称HPS_5。你能以这种方式给出一个解决方案吗?还是我应该重新编辑这个问题。谢谢你抽出时间。非常感谢。