2 回答

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
使用crosstab
with作為新索引名稱(chēng),然后為byDataFrame.rename_axis
添加新列,最后將索引轉(zhuǎn)換為column by?:0 position
DataFrame.insert
DataFrame.reset_index
df = pd.crosstab(df['items'], df['status']).rename_axis(columns=None, index='unique')
df.insert(0, 'count', df.sum(axis=1))
df = df.reset_index()
print (df)
? unique? count? fail? pass
0? ?bike? ? ? 3? ? ?1? ? ?2
1? ? car? ? ? 3? ? ?2? ? ?1
2? ? jet? ? ? 4? ? ?4? ? ?0
如果count應(yīng)該是最后一列,則可以使用margin參數(shù)并刪除最后一行:
df = (pd.crosstab(df['items'], df['status'],?
? ? ? ? ? ? ? ? ? margins=True,?
? ? ? ? ? ? ? ? ? margins_name='count')
? ? ? ?.rename_axis(columns=None, index='unique')
? ? ? ?.iloc[:-1]
? ? ? ?.reset_index())
print (df)
? unique? fail? pass? count
0? ?bike? ? ?1? ? ?2? ? ? 3
1? ? car? ? ?2? ? ?1? ? ? 3
2? ? jet? ? ?4? ? ?0? ? ? 4

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以單獨(dú)獲取值并與以下組合pd.concat:
A = df.groupby("items").size().rename("count")
A
items
bike 3
car 3
jet 4
Name: count, dtype: int64
B = (
df.groupby(["items", "status"])
.size()
.unstack(fill_value=0)
.rename_axis(columns=None)
)
B
fail pass
items
bike 1 2
car 2 1
jet 4 0
pd.concat((A, B), axis=1).reset_index()
items count fail pass
0 bike 3 1 2
1 car 3 2 1
2 jet 4 4 0
添加回答
舉報(bào)