我有一張桌子
| 應用名稱 | 價值觀 |
|---|---|
| JBX | 是的 |
| JBX | 不 |
| JBX | 是的 |
| ABD | 不 |
| ABD | 不 |
| 社區康復 | 是的 |
| LBA | 不 |
| LBA | 是的 |
而且我想更新此表,以便對于 AppName 的每次出現,其中“值”列中的至少一個值是“是”,然后我們將該特定 AppName 的所有值更新為“是”。
更新表:
| 應用名稱 | 價值觀 |
|---|---|
| JBX | 是的 |
| JBX | 是的 |
| JBX | 是的 |
| ABD | 不 |
| ABD | 不 |
| 社區康復 | 是的 |
| LBA | 是的 |
| LBA | 是的 |
我試過
if df2['Values'] == 'Yes':
df2['Values'] == 'Yes' ```
But this throws a ```ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().``` for ```if df2['Values'] == 'Yes':```
uj5u.com熱心網友回復:
使用groupby.transform的方法,將結果放入新列以便與原始Values列進行比較:
df['app_has_any_yes'] = (df.groupby('AppName')['Values']
.transform(lambda x: (x == 'Yes').any())
.replace({True: 'Yes', False: 'No'})
結果:
| 應用名稱 | 價值觀 | app_has_any_yes |
|---|---|---|
| JBX | 是的 | 是的 |
| JBX | 不 | 是的 |
| JBX | 是的 | 是的 |
| ABD | 不 | 不 |
| ABD | 不 | 不 |
| 社區康復 | 是的 | 是的 |
| LBA | 不 | 是的 |
| LBA | 是的 | 是的 |
uj5u.com熱心網友回復:
方便的是,“是”按字典順序排列在“否”之后,所以是>否,你可以這樣做:
df['Values'] = df.groupby('AppName')['Values'].transform('max')
注意。這適用于這個特定的例子,但你可以使用與其他詞相同的邏輯,例如在德語中“Ja”(是)在“Nein”(否)之前,所以你會transform('min')在這種情況下使用
輸出:
AppName Values
0 JBX Yes
1 JBX Yes
2 JBX Yes
3 ABD No
4 ABD No
5 CBR Yes
6 LBA Yes
7 LBA Yes
uj5u.com熱心網友回復:
groupby那你可以試試apply
out = df.groupby('AppName').apply(lambda g: g.assign(Values=['Yes']*len(g) if g['Values'].eq('Yes').any() else ['No']*len(g)))
print(out)
AppName Values
0 JBX Yes
1 JBX Yes
2 JBX Yes
3 ABD No
4 ABD No
5 CBR Yes
6 LBA Yes
7 LBA Yes
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467770.html
標籤:Python python-3.x 熊猫
