在python中,将csv文件与某些相同或不同的列合并
我是新的编码,我有一个问题合并csv文件。我搜索过类似的问题,但没有找到解决方法。仅包括一些相关细节: CSV文件是1950-2017年间不同国家的癌症类型(肺癌、结直肠癌、胃癌、肝癌和乳腺癌) 下面是一个肺癌布局的例子在python中,将csv文件与某些相同或不同的列合并,python,pandas,csv,merge,Python,Pandas,Csv,Merge,我是新的编码,我有一个问题合并csv文件。我搜索过类似的问题,但没有找到解决方法。仅包括一些相关细节: CSV文件是1950-2017年间不同国家的癌症类型(肺癌、结直肠癌、胃癌、肝癌和乳腺癌) 下面是一个肺癌布局的例子 dlung.describe(include='all') dlung Year Cancer Country Gender ASR SE 0 1950 Lung Australia Male 13.89
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
如果可能,如何将所有独立的值(癌症类型和相关ASR(标准化风险)和SE值)与年份、国家(和性别)中的一列合并?是的,如果使用,也可以,但随后会与其他列名称重复:
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
但我认为更好的方法是首先将所有数据帧与
axis=0
结合在一起,默认值是什么,所以应该被删除,最后由和进行重塑:
使用
axis=0
进行Concat以按行合并它们
使用
axis=1
时,您要求它并排连接。我认为@jezrael的回答对您的问题相当全面,但您还应该考虑:您的格式是否与“整洁数据”格式一致?;只有我的50美分:谢谢你的回复,耶斯雷尔。太棒了!还有,谢谢Quant Christo。我同意这不是最好的格式。我将重新格式化,使所有变量分组,而不是像上面那样分开!
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
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