Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并具有相同名称但不排序列的dataframe列_Python_Pandas_Dataframe - Fatal编程技术网

Python 合并具有相同名称但不排序列的dataframe列

Python 合并具有相同名称但不排序列的dataframe列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个列名称为的数据框: '01 2017' '02 2017' ...... '12 2017' '01 2018' '01 2018' .... 因此,您可以看到两列中重复了01 2018和01 2018。我想在不重新排列列的情况下对列进行求和 我目前有以下代码: df.groupby(lambda x:x, axis=1).sum() 但是,输出是: '01 2017' '01 2018' ... '12 2017' '12 2018' 这会按前两位数字对其进行排序,并使排列混乱。

我有一个列名称为的数据框:

'01 2017' '02 2017' ...... '12 2017' '01 2018' '01 2018' ....
因此,您可以看到两列中重复了01 2018和01 2018。我想在不重新排列列的情况下对列进行求和

我目前有以下代码:

df.groupby(lambda x:x, axis=1).sum()
但是,输出是:

'01 2017' '01 2018' ... '12 2017' '12 2018'
这会按前两位数字对其进行排序,并使排列混乱。

我认为您需要使用@piRSquared setup modified重新编制索引:

使用df.columns.unique true按当前顺序列出唯一的列名,然后使用axis=1的reindex将列排序在groupby之后,并使用sum

df = pd.DataFrame(
    np.random.randint(10, size=(6, 5)),
    columns='1 2017|2 2017|1 2018|2 2018|2 2018'.split('|')
)
df.groupby(df.columns, axis=1).sum().reindex(df.columns.unique(), axis=1)
输出:

   1 2017  2 2017  1 2018  2 2018
0       9       2       4      15
1       5       0       0      10
2       1       8       5      10
3       1       1       9       8
4       9       0       0       0
5       6       1       4       5

通过使用Pir的数据,稍微改变它

数据输入

解决方案


请花一点时间看一下网站上的建议和说明,以及关于回答问题的提示。我更喜欢你的解决方案:+他们叫我近视的斯科特。@ScottBoston哈,这让我大笑。我也有罪。我错过了重复的专栏和所有的-:删除我的答案。抓取你的人的答案设置。
np.random.seed([3, 1415])
df = pd.DataFrame(
    np.random.randint(10, size=(5, 4)),
    columns='1 2017|2 2017|1 2018|1 2018'.split('|')
)
df
Out[346]: 
   1 2017  2 2017  1 2018  1 2018
0       0       2       7       3
1       8       7       0       6
2       8       6       0       2
3       0       4       9       7
4       3       2       4       3
df.sum(level=0,axis=1) # using `sum`
Out[347]: 
   1 2017  2 2017  1 2018
0       0       2      10
1       8       7       6
2       8       6       2
3       0       4      16
4       3       2       7