給定一個資料框,我根據他們的“vals”對“titles”進行分組。
titles=['MR.', 'MRS.', 'MR.', 'MR.', 'MRS.', 'MR.', 'MISS.', 'MR.', 'MRS.', 'MR.', 'MR.', 'MR.', 'MRS.', 'MR.',
'MRS.', 'MRS.', 'MR.', 'MR.', 'MISS.', 'MRS.', 'MR.', 'MASTER.', 'MRS.', 'MR.', 'MRS.', 'MR.', 'MISS.',
'MR.', 'MR.', 'MR.', 'MR.', 'MR.', 'MRS.', 'MRS.', 'MR.', 'MR.', 'MISS.', 'MISS.', 'MR.', 'MR.', 'MR.',
'MR.', 'MR.', 'MRS.', 'MRS.', 'MR.', 'MR.', 'MR.', 'MRS.', 'MRS.', 'MR.', 'MR.', 'MISS.', 'MISS.', 'MR.',
'MASTER.', 'MR.', 'MR.', 'MR.', 'MISS.', 'MR.', 'MR.', 'MR.', 'MISS.', 'MASTER.', 'MRS.', 'MISS.', 'MR.',
'MR.', 'MRS.', 'MR.', 'MISS.', 'MR.', 'MISS.', 'MR.', 'MR.', 'MRS.', 'MR.', 'MASTER.', 'DON.']
vals=[1,0,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,1,0,0,0,1,0,1,0,1,
0,1,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0]
d = {'titles': []}
df = pd.DataFrame(data=d)
df['titles']=titles
df['vals']=vals
print(df.groupby([df['vals'] ]['titles'].value_counts())
print(df.groupby([df['vals'] ]['titles'].value_counts().values.tolist())
當我將最后一行轉換為列出后列印最后一行時,我獲得的輸出如下:
[19, 13, 9, 2, 1, 26, 5, 3, 2]
但我想獲得:
[19, 13, 9, 2, 1]
[26, 5, 3, 2]
第二個串列有 4 個專案而不是 5 個,這是因為 df['titles]='DON.' 從不對應于 'vals' 列上的 1。如何確保這些實體將被替換為值 0 而不是根本沒有值?
uj5u.com熱心網友回復:
您可以使用串列理解:
print([i.value_counts().tolist() for _, i in df.groupby("vals")['titles']])
# [[19, 13, 9, 2, 1], [26, 5, 3, 2]]
對于您的第二個問題,您可以使用pd.crosstab:
print (pd.crosstab(df["vals"], df["titles"]))
titles DON. MASTER. MISS. MR. MRS.
vals
0 1 2 9 19 13
1 0 2 3 26 5
uj5u.com熱心網友回復:
可以使用:
df.groupby('vals')['titles'].value_counts().unstack().fillna(0).values
輸出:
[[ 1. 2. 9. 19. 13.]
[ 0. 2. 3. 26. 5.]]
uj5u.com熱心網友回復:
從你的命令開始,你可以使用一個小的串列理解:
# your previous command
counts = df.groupby(df['vals'])['titles'].value_counts()
# list by group
[s.values.tolist() for _,s in counts.groupby(level=0)]
輸出:
[[19, 13, 9, 2, 1], [26, 5, 3, 2]]
獲取用零填充的缺失值
counts = df.groupby(df['vals'])['titles'].value_counts()
list(counts.unstack(fill_value=0).T.to_dict('list').values())
輸出:
[[1, 2, 9, 19, 13], [0, 2, 3, 26, 5]]
uj5u.com熱心網友回復:
嘗試:
>>> df.groupby('vals')['titles'].agg(lambda x: list(x.value_counts())).tolist()
[[19, 13, 9, 2, 1], [26, 5, 3, 2]]
或者
>>> df.groupby('vals')['titles'].value_counts().unstack(fill_value=0).values
[[1, 2, 9, 19, 13], [0, 2, 3, 26, 5]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314358.html
標籤:Python 熊猫 列表 pandas-groupby
上一篇:如何訪問號碼中的號碼
