我有这个数据框:
df:
CNPJ Revenues 2016 Revenues 2015 Revenues 2014
0 01.637.895/0001-32 R$ 12.696.658 NaN R$ 10.848.213
1 02.916.265/0001-60 NaN R$ 162.914.526 R$ 142.412.432
2 02.932.074/0001-91 NaN NaN R$ 1.928.312
3 03.853.896/0001-40 R$ 19.333.453 R$ 18.891.833 R$ 12.645.986
每行代表一家公司,每个“收入”列代表公司参考年度的收入。
我想创建一个名为“last_revenues”的新列,它将具有收入的最后一个值。如果2016年是我们最后的2016年,那么2016年,如果我们没有2016年,但2015年,2015年将是一个。如果我们既没有2016年或2015年,则last_revenues将具有2014年的价值。
它必须如下所示:
CNPJ last_revenues
0 01.637.895/0001-32 R$ 12.696.658
1 02.916.265/0001-60 R$ 162.914.526
2 02.932.074/0001-91 R$ 1.928.312
3 03.853.896/0001-40 R$ 19.333.453
有人可以提出一种方法吗?
答案 0 :(得分:3)
df1 = df.set_index('CNPJ')
df1['last_revenues'] = df1.fillna(method='bfill',axis=1).iloc[:,0]
或者DSM建议我们可以将其缩短为
df1['last_revenues'] = df1.bfill(axis=1).iloc[:,0]
df1.reset_index()
输出:
CNPJ Revenues 2016 Revenues 2015 Revenues 2014 \
0 01.637.895/0001-32 R$ 12.696.658 NaN R$ 10.848.213
1 02.916.265/0001-60 NaN R$ 162.914.526 R$ 142.412.432
2 02.932.074/0001-91 NaN NaN R$ 1.928.312
3 03.853.896/0001-40 R$ 19.333.453 R$ 18.891.833 R$ 12.645.986
last_revenues
0 R$ 12.696.658
1 R$ 162.914.526
2 R$ 1.928.312
3 R$ 19.333.453
答案 1 :(得分:1)
您可以使用df['last_revenues'] = df['Revenues 2016'].fillna(df['Revenues 2015']).fillna(df['Revenues 2014'])
2次:
<mule>
<spring:beans>
<spring:bean id="foo" name="foo" class="java.lang.String">
<spring:constructor-arg value="this is foo." />
</spring:bean>
</spring:beans>
<flow name="test-flow">
<set-payload value="#[app.registry.foo]" doc:name="Set Payload"/>
<dw:transform-message doc:name="Transform Message">
<dw:set-payload>
<![CDATA[%dw 1.0
%output application/xml
---
{
foo: payload
}]]>
</dw:set-payload>
</dw:transform-message>
</flow>
</mule>