我正在尝试根据预先计算的 bin 将 6 列 x 2 行数据帧减少为 3 列 x 2 行数据帧。
我有一个看起来像这样的数据框,例如:
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
最佳答案
创建辅助字典,重命名
列并使用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
关于python - 将具有 x 列的数据帧插入 <x 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55610551/