我有一个带有列名称的数据框:
'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'
这将按前两位数字对其进行排序,并弄乱了排列方式。
答案 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