我是编码新手,在合并 csv 文件时遇到问题。我搜索过类似的问题,但没有找到解决办法。只是包含一些相关细节: CSV文件是1950年至2017年不同国家的癌症类型(肺癌、结直肠癌、胃癌、肝癌和乳腺癌) 下面是肺癌布局的一个例子。
dlung.describe(include='all')
dlung
Year Cancer Country Gender ASR SE
0 1950 Lung Australia Male 13.89 0.56
1 1951 Lung Australia Male 14.84 0.57
2 1952 Lung Australia Male 17.19 0.61
3 1953 Lung Australia Male 18.21 0.62
4 1954 Lung Australia Male 19.05 0.63
5 1955 Lung Australia Male 20.65 0.65
6 1956 Lung Australia Male 22.05 0.67
7 1957 Lung Australia Male 23.93 0.69
8 1958 Lung Australia Male 23.77 0.68
9 1959 Lung Australia Male 26.12 0.71
10 1960 Lung Australia Male 27.08 0.72
我有兴趣根据共享列(年份、国家/地区)将所有癌症类型加入到一个数据框中。 我尝试了不同的方法,但它们似乎都重复年份和国家(如下)
这个还不错,但我有两列分别代表年份和国家/地区
df_lung_colorectal = pd.concat([dlung, dcolorectal], axis = 1) df_lung_colorectal Year Cancer Country Gender ASR SE Year Cancer Country Gender ASR SE
如果我继续这样,我最终会得到 5 个相同的 YEAR 列和 5 个 COUNTRY 列。
如果可能的话,关于如何将所有独立值(癌症类型和相关 ASR(标准化风险)和 SE 值)与仅一列“年份”、“国家”(和“性别”)合并有什么想法吗?
最佳答案
是的,如果使用 DataFrame.set_index
是可能的,但随后又重复了另一个列名称:
print (dlung)
Year Cancer Country Gender ASR SE
0 1950 Lung Australia Male 13.89 0.56
1 1951 Lung Australia Male 14.84 0.57
2 1952 Lung Australia Male 17.19 0.61
3 1953 Lung Australia Male 18.21 0.62
4 1954 Lung Australia Male 19.05 0.63
print (dcolorectal)
Year Cancer Country Gender ASR SE
6 1950 colorectal Australia Male 22.05 0.67
7 1951 colorectal Australia Male 23.93 0.69
8 1952 colorectal Australia Male 23.77 0.68
9 1953 colorectal Australia Male 26.12 0.71
10 1954 colorectal Australia Male 27.08 0.72
<小时/>
df_lung_colorectal = pd.concat([dlung.set_index(['Year','Country','Gender']),
dcolorectal.set_index(['Year','Country','Gender'])], axis = 1)
print (df_lung_colorectal)
Cancer ASR SE Cancer ASR SE
Year Country Gender
1950 Australia Male Lung 13.89 0.56 colorectal 22.05 0.67
1951 Australia Male Lung 14.84 0.57 colorectal 23.93 0.69
1952 Australia Male Lung 17.19 0.61 colorectal 23.77 0.68
1953 Australia Male Lung 18.21 0.62 colorectal 26.12 0.71
1954 Australia Male Lung 19.05 0.63 colorectal 27.08 0.72
但我认为更好的是首先将所有 DataFrame 与 axis=0
连接在一起,这是默认值,因此应该删除并最后通过 DataFrame.set_index
进行 reshape 和 DataFrame.unstack
:
df = pd.concat([dlung, dcolorectal]).set_index(['Year','Country','Gender','Cancer']).unstack()
df.columns = df.columns.map('_'.join)
df = df.reset_index()
print (df)
Year Country Gender ASR_Lung ASR_colorectal SE_Lung SE_colorectal
0 1950 Australia Male 13.89 22.05 0.56 0.67
1 1951 Australia Male 14.84 23.93 0.57 0.69
2 1952 Australia Male 17.19 23.77 0.61 0.68
3 1953 Australia Male 18.21 26.12 0.62 0.71
4 1954 Australia Male 19.05 27.08 0.63 0.72
关于python - 在python中合并某些列相同而其他列不同的csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58371292/