我正在尝试将6列x 2行数据帧减少为例如,一个3列x 2行的数据框(基于预先计算的bin)。
我有一个看起来像这样的数据框,例如:
df =
0 1 2 3 4 5 6 etc
0 3 4 5 2 4 1 2 etc
1 5 1 3 5 2 2 3 etc
以及如下所示的列表列表:
dir = [[0,1,2],[3,4],[5,6]]
此列表列表代表列标题。
我想遍历数据框中的行,并根据每个列表的长度插入新值。基本上只是根据列标题取平均值。例如,[0,1,2]列表包含3,4,5个值,因此新值应为(3 + 4 + 5)/ 3 = 4。
新数据框应如下所示:
df1 =
0 1 2
0 4 3 1.5
1 3 3.5 2.5
答案 0 :(得分:4)
创建辅助字典,rename
列,并使用mean
通过新列名称进行汇总:
L = [[0,1,2],[3,4],[5,6]]
d = {k: i for i, x in enumerate(L) for k in x}
print (d)
{0: 0, 1: 0, 2: 0, 3: 1, 4: 1, 5: 2, 6: 2}
df = df.rename(columns=d).mean(axis=1, level=0)
print (df)
0 1 2
0 4.0 3.0 1.5
1 3.0 3.5 2.5
详细信息:
print (df.rename(columns=d))
0 0 0 1 1 2 2
0 3 4 5 2 4 1 2
1 5 1 3 5 2 2 3