我有一个数据透视表,其中包含一个时间序列中的多列数据:
A B C D
11/1/2018 1 5 5 7
11/2/2018 2 6 6 8
11/3/2018 3 7 7 9
在此示例中,数据列中的值并不重要。 我想从“ B”和“ C”列的子集中减去“键”列(在此例中为A列)中的值。然后,我想删除不在子集或键列中的所有列。结果将是:
A B C
11/1/2018 1 4 4
11/2/2018 2 4 4
11/3/2018 3 4 4
我过去通过以下代码减去列:
df['dif'] = df['B'] -df['A']
但这将添加“ dif”列。我想用B-A值替换B列。此外,与其一次一次地传递指令(B-A,C-A),不如传递诸如“如果列表中的列,减去键列,否则删除列”之类的列表。
谢谢
答案 0 :(得分:1)
您可以使用apply
从您选择的子集列中减去A,最后再使用A再次join
。
df['A'].to_frame().join(df[['B','C']].apply(lambda x: x - df['A']))
A B C
11/1/2018 1 4 4
11/2/2018 2 4 4
11/3/2018 3 4 4
答案 1 :(得分:1)
pandas.DataFrame.sub
与axis=0
从Series
中减去DataFrame
时,熊猫默认会将DataFrame
的列与index
的{{1}}对齐。这是在使用Series
运算符时发生的情况。但是,当您使用-
方法时,可以覆盖该默认值,并指定pandas.DataFrame.sub
应该使其索引与DataFrame
的索引对齐。
Series