I have this database:
id power_count power_name type second_power second_power_type
0 001 1 fire attack nan nan
1 001 1 fire attack nan nan
2 002 2 water defense nan nan
3 002 2 sand attack nan nan
4 002 2 sand attack nan nan
5 003 1 fire defense nan nan
6 004 2 fire defense nan nan
7 004 2 water attack nan nan
我想解決這個問題:
id power_count power_name type second_power second_power_type
0 001 1 fire attack nan nan
1 001 1 fire attack nan nan
2 002 2 water defense sand attack
3 002 2 sand attack water defense
4 002 2 sand attack water defense
5 003 1 fire defense nan nan
6 004 2 fire attack water attack
7 004 2 water attack fire attack
因此,僅在具有 2 個功率計數的行中添加有關另一個功率的資訊
我試圖做一個回圈,但沒有成功。
uj5u.com熱心網友回復:
這是一個基于 a 的通用方法merge:
key = df.groupby(['id'])['power_name'].transform(lambda x: x.factorize()[0])
m = ~df[['id', 'power_name', 'type']].duplicated()
out = (df
[['id', 'power_count', 'power_name', 'type']]
.merge(df.loc[m, ['id', 'power_name', 'type']],
left_on=['id', key], right_on=['id', 1-key[m]],
suffixes=(None ,'_2'), how='left',
)
.rename(columns={'power_name_2': 'second_power',
'type_2': 'second_power_type'})
.drop(columns='key_1')
)
輸出:
id power_count power_name type second_power second_power_type
0 1 1 fire attack NaN NaN
1 1 1 fire attack NaN NaN
2 2 2 water defense sand attack
3 2 2 sand attack water defense
4 2 2 sand attack water defense
uj5u.com熱心網友回復:
dict1 = {'water':'sand', 'sand':'water', 'defense':'attack', 'attack':'defense'}
df.loc[df['power_count'] == 2, ['second_power', 'second_power_type']] = df.loc[df['power_count'] == 2, ['power_name', 'type']].replace(dict1).to_numpy()
df
df
id power_count power_name type second_power second_power_type
0 1 1 fire attack NaN NaN
1 1 1 fire attack NaN NaN
2 2 2 water defense sand attack
3 2 2 sand attack water defense
4 2 2 sand attack water defense
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/532422.html
標籤:Python熊猫循环
上一篇:為什么我不能在我的forEach回圈中迭代變數**element**。*它說UncaughtReferenceError:elementisnotdefined*
下一篇:Python中的串列和回圈
