我有一个像这样的 Pandas 数据框
UIID ISBN
a 12
b 13
我想将每个 UUID 与 ISBN 进行比较,并在数据框中添加一个计数列。
UUID ISBN Count
a 12 1
a 13 0
b 12 0
b 13 1
如何在 pandas 中完成此操作。我知道交叉表函数做同样的事情,但我想要这种格式的数据。
最佳答案
df = pd.crosstab(df['UIID'], df['ISBN']).reset_index().melt('UIID', value_name='count')
print (df)
UIID ISBN count
0 a 12 1
1 b 12 0
2 a 13 0
3 b 13 1
替代解决方案 GroupBy.size
和 reindex
通过 MultiIndex.from_product
:
s = df.groupby(['UIID','ISBN']).size()
mux = pd.MultiIndex.from_product(s.index.levels, names=s.index.names)
df = s.reindex(mux, fill_value=0).reset_index(name='count')
print (df)
UIID ISBN count
0 a 12 1
1 a 13 0
2 b 12 0
3 b 13 1
关于python - 在 Pandas 中生成具有二进制计数值的交叉表类型数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54645949/