我使用Python 2.7(在IPython的筆記本電腦),我有以下的熊貓數據框:的Python:如何找到模式(第1欄 - 對象),由第2山坳,輸出分爲3山坳
df = pd.DataFrame({'Client': [161252, 8858, 8858, 8858, 8858, 56552, 56552],
'State': ['NE', 'MN', 'MN', 'TX', 'MN', 'NJ', 'WA']})
我想要做的是按「客戶端」對行進行分組,爲每個客戶端找到「狀態」模式,然後將輸出放到名爲「Mode_State」的新列中。 「狀態」列是一個Python對象。
我已經試過如下:
from scipy.stats import mode
df.insert(1, 'Mode_State', ' ')
df['Mode_State'] = df['State'].groupby(df["Client"]).transform(mode)
df
這將導致以下:
Client Mode_State State
0 161252 NE NE
1 8858 MN MN
2 8858 3 MN
3 8858 MN TX
4 8858 3 MN
5 56552 [NJ] NJ
6 56552 [1] WA
我意識到scipy.stats還包括模式的數量,所以我嘗試 的以下(僅返回兩個字符的狀態信息,而不是 模式編號):
df['Mode_State'] = df['State'].groupby(df["Client"]).transform(mode[0])
df
這當然給了我:
TypeError Traceback (most recent call last)
<ipython-input-42-1050c2b46d90> in <module>()
1 from scipy.stats import mode
2
----> 3 df['Mode_State'] = df['State'].groupby(df["Client"]).transform(mode[0])
4 df
TypeError: 'function' object has no attribute '__getitem__'
我也試過StackExchange與字符串處理各方面的反應(例如lambda,agg,map等)。並得到我的第一個結果或錯誤消息的變體。如果有兩種相同的模式(例如,Client 56552具有NJ & WA),那麼結果可以作爲最低返回。
如果有人有一些提示將我指向正確的方向,我將不勝感激。我一直在通過Wes McKinney的Python進行數據分析,但使用字符串的工作方式對我來說更具挑戰性)。
謝謝亞歷山大,這對我很好。只有一個問題,客戶端56552具有相同的模式(新澤西州和新西蘭),那麼是否有辦法將答案填入最低(即新澤西州和新澤西州)? – gincard
根據df.mode的文檔字符串:'獲取沿選定軸的每個元素的模式。如果沒有任何內容,則爲空 有2+個事件。爲每個標籤的每種模式添加一行,用nan填充空白 。 請注意,對於選定的軸(當多個項目共享最大頻率時),可能會返回多個值,這是返回數據幀的原因 。如果你想在數據幀''df''中將缺失值 與模式相關聯,你可以這樣做: ''''df.fillna(df.mode()。iloc [0])'' ' – Alexander