我有一个具有以下结构的df:
my_df
date hour product
2019-06-06 17 laptopt
2019-06-06 15 printer
2019-06-07 14 laptopt
2019-06-07 17 desktop
如何获得这样的df:
hour laptop printer desktop
14 1 0 0
15 0 1 0
16 0 0 0
17 1 0 1
到目前为止,我一直在尝试做my_df.groupby(["product","hour"]).count().unstack(level=0)
date
product desktop laptop printer
hour
14 NaN 1.0 NaN
15 NaN NaN 1.0
17 1.0 1.0 NaN
我被困在那里。
谢谢。
答案 0 :(得分:2)
致电unstacked
,然后执行以下操作:
index = pd.RangeIndex(df.hour.min(),df.hour.max() + 1)
unstacked.reindex(index).fillna(0).astype(int)
答案 1 :(得分:2)
您可以使用<div ng-app="app">
<div ng-controller="c1">
c1: {{response.origin}}
</div>
<div ng-controller="c2">
c2: {{response.origin}}<br>
<input width="200" ng-model="response.origin" style="width: 300px;" /><br>
</div>
</div>
和pd.crosstab
:
reindex
答案 2 :(得分:2)
IIUC
df.set_index('hour')['product'].str.get_dummies().sum(level=0).reindex(range(df.hour.min(),df.hour.max()+1),fill_value=0)
Out[15]:
desktop laptopt printer
hour
14 0 1 0
15 0 0 1
16 0 0 0
17 1 1 0