我有一个数据框如下:
Machine Time Part PowerA PowerB
1 20:30 1 0.1 0.4
1 20:30 2 0.9 0.7
1 20:31 1 0.3 0.1
1 20:31 2 0.2 0.3
2 20:30 1 0.2 0.5
2 20:31 1 0.8 0.4
我希望它是这样的:
Machine Time Part1_PowerA Part1_PowerB Part2_PowerA Part2_PowerB
1 20:30 0.1 0.4 0.9 0.7
1 20:31 0.3 0.1 0.2 0.3
2 20:30 0.2 0.5 -1.0 -1.0
2 20:31 0.8 0.4 -1.0 -1.0
我们的目标是为每个< code>Part和< code>Power创建一列,并填写如下所示的值。每台机器都有不同数量的零件,但最多为8个(这将导致列< code>Part8_PowerA和< code>Part8_PowerB)。当机器没有某个部件时,Part_Power的值用-1填充。
我已经寻找了很长时间的解决方案,包括这个,但是我不能适应我的情况,我实际上改变了列的名称,作为一个行值已经存在的列的组合。
谢谢!
您可以这样做:
df = pd.pivot_table(df, values=['PowerA','PowerB'], index=['Machine', 'Time'], columns='Part')
df.columns = df.columns.to_flat_index()
df.columns = [ 'Part' + str(col[1]) + '_' + col[0] for col in df.columns]
df.reset_index(inplace=True)
df.fillna(-1,inplace=True)
您可以将< code>pivot与字符串格式结合使用,以获得一个相当简洁的解决方案:
out = (
df.pivot(['Machine', 'Time'], 'Part')
.fillna(-1)
.sort_index(level=1, axis=1)
)
out.columns = out.columns.map('Part{0[1]}_{0[0]}'.format)
out = out.reset_index()
print(out)
Machine Time Part1_PowerA Part1_PowerB Part2_PowerA Part2_PowerB
0 1 20:30 0.1 0.4 0.9 0.7
1 1 20:31 0.3 0.1 0.2 0.3
2 2 20:30 0.2 0.5 -1.0 -1.0
3 2 20:31 0.8 0.4 -1.0 -1.0
或者,如果您想要一个方法链接的解决方案,您将需要使用< code >。管道从< code >访问当前列值。set_axis,因此您最终会有一些额外的代码膨胀:
print(
df.pivot(['Machine', 'Time'], 'Part')
.fillna(-1)
.sort_index(level=1, axis=1)
.pipe(lambda d:
d.set_axis(
d.columns.map('Part{0[1]}_{0[0]}'.format),
axis='columns'
)
)
.reset_index()
)
Machine Time Part1_PowerA Part1_PowerB Part2_PowerA Part2_PowerB
0 1 20:30 0.1 0.4 0.9 0.7
1 1 20:31 0.3 0.1 0.2 0.3
2 2 20:30 0.2 0.5 -1.0 -1.0
3 2 20:31 0.8 0.4 -1.0 -1.0
让我们做pivot_table
然后交换级别
s = df.pivot_table(index= ['Machine','Time'],
columns = df.Part.astype(str).radd('Part'),
values=['PowerA','PowerB'],
fill_value=-1).swaplevel(1,0, axis=1).sort_index(level=0, axis=1)
s.columns = s.columns.map('_'.join)
s.reset_index(inplace=True)
s
Out[751]:
Machine Time Part1_PowerA Part1_PowerB Part2_PowerA Part2_PowerB
0 1 20:30 0.1 0.4 0.9 0.7
1 1 20:31 0.3 0.1 0.2 0.3
2 2 20:30 0.2 0.5 -1.0 -1.0
3 2 20:31 0.8 0.4 -1.0 -1.0
我有一个用户表单上的组合框,我想用一个值列表填充它。 这些值位于一系列列的中间,可以被认为是列标题,因为每个列都在自己的列中。列的列表会随着时间的推移而扩展,每次初始化用户表单时都应该更新。我已经能够从单个列创建列表,也可以从多个列创建列表,但是当我这样做时,值保持在列方向,我无法将它们转置到行列表中。列中的数据如下所示: 我希望组合框列表条目如下所示: 这个用户表单由另一个用户表单初始化,该用户
问题内容: 我有以下数据框: 我要这样 堆叠/堆叠似乎不起作用。 问题答案: 您正在寻找: 以及是否要重新排列列:
我是数据科学的初学者,我正在尝试使用Pandas来旋转此数据框架: 所以它变成这样:(标签应该变成列,文件路径变成行。) “标签”列是一组或一类文件路径。我想把它转换成这样一种方式,它适合这个函数:tf。Keras.preprocessing.image.flow_from_dataframe 提前感谢所有帮助我的人。
我有以下数据帧: 我想这样。 堆叠/卸载似乎不工作。
问题内容: 考虑下面的示例,其中有一个包含人员记录的 Person 表和一个包含链接到人员的可选属性的 PersonAttribute 表: Table: Person Table PersonAttribute 我将如何编写一个查询,使所有具有属性的人都像列一样返回?我需要的结果集是: 因此,从本质上讲,我需要编写一个查询,该查询将获取所有带有所有唯一属性键的人记录,这些键被转换为具有每个人记录
问题内容: 我的表包含以下列: 我想显示如下: 如您所见,我想将列与自定义列名成对显示。这对是列A和B,列C和D以及列C和D。 问题答案: