我有一个代码如下,
safety_df ={}
for key3,safety in analy_df.items():
safety = pd.DataFrame({"Year":safety['index'],
'{}'.format(key3)+"_CR":safety['CURRENT'],
'{}'.format(key3)+"_ICR":safety['ICR'],
'{}'.format(key3)+"_D/E":safety['D/E'],
'{}'.format(key3)+"_D/A":safety['D/A']})
safety_df[key3] = safety
在这段代码中,我从另一个字典中提取值。它将遍历我为什么在密钥中使用格式命名的各个公司。输出包含每个公司的以上 5 列(Year、CR、ICR、D/E、D/A)。
打印出来的输出有很多 NA 值,之后 在这里,我想要所有公司的通用列,并打印以下列,即 C1_CR、C2_CR、C3_CR、C1_ICR、C2_ICR、C3_ICR、...C3_D/A ..
我尝试使用以下代码提取,
pd.concat(safety_df.values())
此示例输出..
这里它为每个列表提取值,但由于 for 循环而打印出 NA 值?
我也用 groupby 试过了,没用?..
如何将Year设置为普通列,并排打印其他值。
谢谢
答案 0 :(得分:1)
使用 axis=1
沿列连接:
import numpy as np
import pandas as pd
years = np.arange(2010, 2021)
n = len(years)
c1 = np.random.rand(n)
c2 = np.random.rand(n)
c3 = np.random.rand(n)
frames = {
'a': pd.DataFrame({'year': years, 'c1': c1}),
'b': pd.DataFrame({'year': years, 'c2': c2}),
'c': pd.DataFrame({'year': years[1:], 'c3': c3[1:]}),
}
for key in frames:
frames[key].set_index('year', inplace=True)
df = pd.concat(frames.values(), axis=1)
print(df)
结果
c1 c2 c3
year
2010 0.956494 0.667499 NaN
2011 0.945344 0.578535 0.780039
2012 0.262117 0.080678 0.084415
2013 0.458592 0.390832 0.310181
2014 0.094028 0.843971 0.886331
2015 0.774905 0.192438 0.883722
2016 0.254918 0.095353 0.774190
2017 0.724667 0.397913 0.650906
2018 0.277498 0.531180 0.091791
2019 0.238076 0.917023 0.387511
2020 0.677015 0.159720 0.063264
请注意,我已明确将索引设置为“年份”列,在我的示例中,我已从“c”列中删除了第一年。这是为了显示连接时不同数据帧的索引如何匹配。如果将索引保留为其标准值,您将获得不同步的年数,而是在“c”列的底部出现 NaN 值。