如何为列中的每个类别创建行?

2024-04-26 02:49:01 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下数据。比如我的孩子从下午1点到3点每小时打开冰箱多少次。你知道吗

| ----- | ----- | ----- |
|  Name |  Hour |  Open |
| ----- | ----- | ----- |
|  Bob  |     1 |     4 |
| ----- | ----- | ----- |
|  Bob  |     3 |     2 |
| ----- | ----- | ----- |
|  Jane |     1 |     1 |
| ----- | ----- | ----- |
|  Jane |     2 |     7 |
| ----- | ----- | ----- |

如果我称之为熊猫,我如何填补失踪的时间,以便我可以有以下数据帧?你知道吗

| ----- | ----- | ----- |
|  Name |  Hour |  Open |
| ----- | ----- | ----- |
|  Bob  |     1 |     4 |
| ----- | ----- | ----- |
|  Bob  |     2 |  None |    <<-- New row with Null or 0 for 'Open' column.
| ----- | ----- | ----- |
|  Bob  |     3 |     2 |
| ----- | ----- | ----- |
|  Jane |     1 |     1 |
| ----- | ----- | ----- |
|  Jane |     2 |     7 |
| ----- | ----- | ----- |
|  Jane |     3 |  None |    <<-- New row with Null or 0 for 'Open' column.
| ----- | ----- | ----- |

显然,我有点需要它是自动的,这样我就可以用它来处理一些真实的数据。所以我不能插入一行。索引或值排序并不重要。你知道吗


Tags: or数据namenonenewforwith孩子
1条回答
网友
1楼 · 发布于 2024-04-26 02:49:01

想法是通过^{}创建的所有可能的组合使用^{}

mux = pd.MultiIndex.from_product([df['Name'].unique(), 
                                  range(1, df['Hour'].max() + 1)], names=['Name','Hour'])
df1 = (df.set_index(['Name','Hour'])
         .reindex(mux)
         .reset_index())
print (df1)
   Name  Hour  Open
0   Bob     1   4.0
1   Bob     2   NaN
2   Bob     3   2.0
3  Jane     1   1.0
4  Jane     2   7.0
5  Jane     3   NaN

如果可以使用0.24+,请使用Nullable Integer Data Type

df1 = (df.set_index(['Name','Hour'])
         .reindex(mux).astype('Int64')
         .reset_index())
print (df1)
   Name  Hour  Open
0   Bob     1     4
1   Bob     2   NaN
2   Bob     3     2
3  Jane     1     1
4  Jane     2     7
5  Jane     3   NaN

对于将不存在的值替换为0添加fill_value参数:

df1 = (df.set_index(['Name','Hour'])
         .reindex(mux, fill_value=0)
         .reset_index())
print (df1)
   Name  Hour  Open
0   Bob     1     4
1   Bob     2     0
2   Bob     3     2
3  Jane     1     1
4  Jane     2     7
5  Jane     3     0

相关问题 更多 >

    热门问题