Python Pandas dataframe—计算符合条件的行的总和,并将其与列表元素进行比较
我有一个数据示例:Python Pandas dataframe—计算符合条件的行的总和,并将其与列表元素进行比较,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据示例: 0 1 2 3 2 Text1 1 1 5 5,00 3 Text2 8 4 0 0,00 4 Text3 1 3 0 2,00 5 SUM 6 0 0
0 1 2 3
2 Text1 1 1 5 5,00
3 Text2 8 4 0 0,00
4 Text3 1 3 0 2,00
5 SUM 6 0 0 7,00
6 Text1 1 1 0 10
7 Text2 8 4 0 0,00
8 Text3 1 3 0 0,00
8 Text4 1 3 0 2,02
9 SUM 6 0 0 20
我想计算最后一列中各行的总和,直到单词“sum”出现在df[0]
然后将此总和的结果分配给列表。
例如:第一个和应该是这样的:
Text1行+Text2+Text3
=5,00+0,00+2,00
-前几行df[:,-1]
的和
然后列表的第一个元素是['7,00']
然后是
df[0]
中单词sum
前面行中最后一列的总和:
Text1+Text2+Text3+Text3
=10+0+0+2,02
然后列表的第二个元素是
['12,02']
,整个列表现在看起来是:['7,00'],['12,02']
或['7,00','12,02']
最后,我想将整个列表与df.loc[(df[0]=='SUM')]
在df的条件下,这样的总和计数是可能的吗?
给我一些提示或说明我如何做,以及是否可行。使用:
#convert last column to numbers
df.iloc[:, -1] = df.iloc[:, -1].str.replace(',','.').astype(float)
#create groups with last value SUM
df.insert(0, 'g', df[0].eq('SUM').iloc[::-1].cumsum().iloc[::-1])
#sum values per groups with omit last value (SUM)
df.insert(0, 'new', df.iloc[:, -1].groupby(df['g']).transform(lambda x: x[:-1].sum()))
print (df)
new g 0 1 2 3 4
2 7.00 2 Text1 1 1 5 5.00
3 7.00 2 Text2 8 4 0 0.00
4 7.00 2 Text3 1 3 0 2.00
5 7.00 2 SUM 6 0 0 7.00
6 12.02 1 Text1 1 1 0 10.00
7 12.02 1 Text2 8 4 0 0.00
8 12.02 1 Text3 1 3 0 0.00
8 12.02 1 Text4 1 3 0 2.02
9 12.02 1 SUM 6 0 0 20.00
#compare values
df1 = df[df['new'].eq(df.iloc[:, -1]) & df[0].eq('SUM')]
print (df1)
new g 0 1 2 3 4
5 7.0 2 SUM 6 0 0 7.0
很好的解决方案。谢谢你的帮助。现在我要做的就是添加:
df1.loc[df['new']==df.iloc[:,-1],'Equal']='True'df1.loc[df['new']!=df.iloc[:,-1],'Equal']='False'
,我不需要使用任何其他列表。再次感谢你的帮助。我将分析代码并在其他情况下使用。@DeepSea-或使用df['Equal']=df['new'].eq(df.iloc[:,-1])&df[0.eq('SUM')