我有一个看起来像这样的数据框:
Index_1 Index_2 Week_1 Week_2 Week_3
0 A 1 2 3
B 2 3 4
1 A 4 5 6
B 7 8 9
对于Index_1中的每个唯一值,我想向Index_2添加一行,称为“ Diff”,该行将计算Week_1,Week_2,Week_3等中的A和B之间的差。
请参见下文,希望它看起来像:
Index_1 Index_2 Week_1 Week_2 Week_3
0 A 1 2 3
B 2 3 4
Diff 1 1 1
1 A 4 5 6
B 7 8 9
Diff 3 3 3
答案 0 :(得分:3)
另一种方法是stack/unstack
:
new_df = df.unstack(level=-1).stack(level=0)
new_df['Diff'] = new_df['B'] - new_df['A']
new_df = new_df.unstack(level=-1).stack(level=0)
输出:
Week_1 Week_2 Week_3
Index_1 Index_2
0 A 1 2 3
B 2 3 4
Diff 1 1 1
1 A 4 5 6
B 7 8 9
Diff 3 3 3
答案 1 :(得分:0)
对不起,我不会对此进行编码,但是我的建议是识别一些东西。
您正在两个5列宽和4行高的数组中显示多个值。 (或者一个7行高的数组),或者一个3维数组,以一种非常简洁和可识别的方式存储所有信息。这都是关于选择如何规范化数据的。
我的建议是将代码写入数组中的存储 Subtrahend 和 Minuend 。
然后,编写代码以计算 差异并将其存储在数组中。
然后以您希望的方式将代码编写为 display 。
讲故事,对故事进行伪编码,然后在伪代码中编码。
答案 2 :(得分:0)
尝试一下:
diff = df.groupby('Index_1').diff().dropna().rename(index={'B': 'Diff'})
df = df.append(diff).sort_index()
结果:
Week_1 Week_2 Week_3
Index_1 Index_2
0 A 1.0 2.0 3.0
B 2.0 3.0 4.0
Diff 1.0 1.0 1.0
1 A 4.0 5.0 6.0
B 7.0 8.0 9.0
Diff 3.0 3.0 3.0
答案 3 :(得分:0)
字典如何处理
dict = {
"dataframe":[
{
"A":[1,2,3],
"B":[2,3,4]
},
{
"A":[4,5,6],
"B":[7,8,9]
}
]
}
使用此代码:
for i in dict["dataframe"]:
i["diff"] = []
for weak in range(len(i["A"])):
i["diff"].append(i["B"][weak]-i["A"][weak])
结果:
{
"dataframe":[
{
"A":[1,2,3],
"B":[2,3,4],
"diff":[1,1,1],
},
{
"A":[4,5,6],
"B":[7,8,9],
"diff":[3,3,3]
}
]
}
我想这对于像我这样的新手来说更容易理解。