0
我有這樣的數據幀:Python的改變柱
x = pd.DataFrame({'colA':['A','A','A','B','C','C'], 'colB':['X','nm','X','nm','nm','nm']})
x
Out[254]:
colA colB
0 A X
1 A nm
2 A X
3 B nm
4 C nm
5 C nm
我要在以下以取代B列的值:
對於A列中的每個唯一值,如果COLB包含值X,然後將所有colB值替換爲「X」,即用列X的每組值替換所有值'nm'。
如果列A中的組(例如,值C在此示例中)在B列中不包含'X'的值,則只保留'nm'。
結果應該是:
Out[254]:
colA colB
0 A X
1 A X
2 A X
3 B nm
4 C nm
5 C nm
我試圖做到這一點使用GROUP BY的和計數其出現在A列中的每個唯一值「X」值的數目,但我覺得這是非常令人費解。希望有一個更簡單的方法。
能否請您就如何變換這裏工作一些信息呢?有這麼一點文件,你似乎很快得出結論。我已經搜索了2個小時,並不認爲我完全理解它在做什麼。 – user33484
@ user33484對分組的DataFrame有兩個主要操作:聚合和轉換。聚合會爲每個組生成一個值。例如,如果按性別分組,則可以計算男性和女性的平均體重。最後你有兩個數據點:男性的平均體重和女性的平均體重。現在假設每個人都想計算他們的權重和平均體重之間的差異。這仍然使用聚合值,但也會轉換Series中每個單獨的數據點。 – ayhan
所以,如果你想最終得到每個組的單個值,你可以使用groupby.agg,但是如果你想根據關於他們組的一些特性來改變每個觀察結果,你應該使用groupby.transform。在這個例子中,我們遵循相同的兩個步驟:1)組中是否包含'X'(聚合 - 返回一個值爲True或False)2)如果爲True,則將所有值更改爲X(轉換) – ayhan