合并具有相同名称但不对列进行排序的数据框列

时间:2018-08-08 14:32:28

标签: 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'

这将按前两位数字对其进行排序,并弄乱了排列方式。

2 个答案:

答案 0 :(得分:2)

我认为您需要reindex,使用已修改的@piRSquared设置:

使用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

答案 1 :(得分:2)

通过使用Pir中的数据,对其稍作更改

from r in ent.MyTable group r by new { r.EmployeeName, r.EmployeeID } into g select new { EmployeeName = g.Key.EmployeeName, Count = g.Count(), EmployeeID = g.Key.EmployeeID } into tmp select new { EmployeeName = tmp.EmployeeName + "(" + Count + ")", EmployeeID = tmp.EmployeeID }

Data input

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

solution