我有以下資訊。
假設我有以下串列。
my_list = [2,3,4,5]
我的資料框如下:
df
Col1 Value
[2,3,6] Hot
[7] Mild
[10,11] Cool
[5,9] Cool
[2,5,6] Mild
我想檢查my_list列 Col1中是否存在串列中的值之一。如果存在,將相應行的值列中的值更改為輕度。但如果值Hot保持原樣。
我想看到類似下面的內容。
Col1 Value
[2,3,6] Hot
[7] Mild
[10,11] Cool
[5,9] Mild
[2,5,6] Mild
我只是在尋找一個簡單的腳本,它可以迭代和檢查每一行并更改相應行另一列中的值。
我試過這個。
df["Value"] =(d["Value"].apply(lambda x: "Mild" if len(set(x["Col1"]).intersection(my_list)) >0
and (x["Value"] != 'Hot') else x["Value"],axis=1) )
任何人都可以對此提供幫助嗎?
uj5u.com熱心網友回復:
該方法與您之前的問題幾乎相同,只需更改一個條件:
match = df['Col1'].explode().isin(my_list).groupby(level=0).any()
df['Value'] = df['Value'].mask(match & df['Value'].ne('Hot'), 'Mild')
輸出:
Col1 Value
0 [2, 3, 6] Hot
1 [7] Mild
2 [10, 11] Cool
3 [5, 9] Mild
4 [2, 5, 6] Mild
uj5u.com熱心網友回復:
使用mask隱藏行與Hot值,那么explode你的資料幀之前檢查Col1值是my_list:
df.loc[df.mask(df['Value'].eq('Hot')).explode('Col1').isin(my_list)
.groupby(level=0)['Col1'].any(), 'Value'] = 'Mild'
print(df)
# Output:
Col1 Value
0 [2, 3, 6] Hot
1 [7] Mild
2 [10, 11] Cool
3 [5, 9] Mild
4 [2, 5, 6] Mild
uj5u.com熱心網友回復:
我們可以set.isdisjoint用來檢查串列是否不相交,然后使用布爾索引來loc更新值
m1 = df['Value'] != 'Hot'
m2 = df['Col1'].map(set(my_list).isdisjoint)
df.loc[m1 & ~m2, 'Value'] = 'Mild'
Col1 Value
0 [2, 3, 6] Hot
1 [7] Mild
2 [10, 11] Cool
3 [5, 9] Mild
4 [2, 5, 6] Mild
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/392012.html
標籤:熊猫
