python - 填充和 reshape pandas 数据框

标签 python pandas padding

我有一个具有以下形式的数据框:

data = pd.DataFrame({'ID':[1,1,1,2,2,2,2,3,3],'Time':[0,1,2,0,1,2,3,0,1],
                     'sig':[2,3,1,4,2,0,2,3,5],'sig2':[9,2,8,0,4,5,1,1,0],
                     'group':['A','A','A','B','B','B','B','A','A']})

print(data)

   ID  Time  sig  sig2 group
0   1     0    2     9     A
1   1     1    3     2     A
2   1     2    1     8     A
3   2     0    4     0     B
4   2     1    2     4     B
5   2     2    0     5     B
6   2     3    2     1     B
7   3     0    3     1     A
8   3     1    5     0     A

我想 reshape 和填充,使每个“ID”具有相同数量的时间值,sig1、sig2 用零(或 ID 内的平均值)填充,并且该组具有相同的字母值。重新填充后的输出将是:

data_pad = pd.DataFrame({'ID':[1,1,1,1,2,2,2,2,3,3,3,3],'Time':[0,1,2,3,0,1,2,3,0,1,2,3],
                     'sig1':[2,3,1,0,4,2,0,2,3,5,0,0],'sig2':[9,2,8,0,0,4,5,1,1,0,0,0],
                     'group':['A','A','A','A','B','B','B','B','A','A','A','A']})

print(data_pad)

    ID  Time  sig1  sig2 group
0    1     0     2     9     A
1    1     1     3     2     A
2    1     2     1     8     A
3    1     3     0     0     A
4    2     0     4     0     B
5    2     1     2     4     B
6    2     2     0     5     B
7    2     3     2     1     B
8    3     0     3     1     A
9    3     1     5     0     A
10   3     2     0     0     A
11   3     3     0     0     A

我的最终目标是最终将其 reshape 为具有形状的东西(ID 数量、时间点数量、序列数量{2 此处})。

似乎如果我对数据进行透视,它会填充 nan 值,这对于信号值来说很好,但对于组来说则不然。我还希望避免循环 data.groupby('ID'),因为我的实际数据有大量组,循环可能会非常慢。

最佳答案

这是一种使用 pd.MultiIndex.from_product 创建新索引并使用它在 Time 列上重新索引的方法:

df = data.set_index(['ID', 'Time'])
# define a the new index
ix = pd.MultiIndex.from_product([df.index.levels[0], 
                                 df.index.levels[1]], 
                                 names=['ID', 'Time'])
# reindex using the above multiindex
df = df.reindex(ix, fill_value=0)
# forward fill the missing values in group
df['group'] = df.group.mask(df.group.eq(0)).ffill()

print(df.reset_index())

    ID   Time  sig  sig2 group
0    1     0    2     9     A
1    1     1    3     2     A
2    1     2    1     8     A
3    1     3    0     0     A
4    2     0    4     0     B
5    2     1    2     4     B
6    2     2    0     5     B
7    2     3    2     1     B
8    3     0    3     1     A
9    3     1    5     0     A
10   3     2    0     0     A
11   3     3    0     0     A

关于python - 填充和 reshape pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59200373/

相关文章:

python - 使用 Python Loop 从 Excel 文件创建多个 .txt 文件

python - Pandas 用 df.drop 删除行不起作用

python - Anaconda Jupyter 笔记本内核问题

JavaScript SyntaxError : JSON. 解析:意外的字符行 1

python - 以奇怪的方式对 Pandas 数据框进行排序和分组

css - 响应式网页设计 : div width + padding not going across containing div even though they equal 100%

CSS padding简写混淆

database - Visio 2013 中鱼尾纹属性的填充大小?

python - 按字符串列表对字典列表进行排序

python - 打印列表中元素的 __str__