Python 如何基于两列的条件求和,并使用Pandas以交叉表格式显示?
给定以下数据帧:Python 如何基于两列的条件求和,并使用Pandas以交叉表格式显示?,python,pandas,dataframe,crosstab,Python,Pandas,Dataframe,Crosstab,给定以下数据帧: Name Activity Hour Month A TT 5 1 A TT 2 1 A UU 1 1 A UU 1 2 A UU 1 3 B TT 40 3 C UU 10
Name Activity Hour Month
A TT 5 1
A TT 2 1
A UU 1 1
A UU 1 2
A UU 1 3
B TT 40 3
C UU 10 1
D TT 2 2
D TT 2 2
D TT 2 2
D TT 5 1
下一步是,如果行的Name
列和Activity
列的值相同,则获取总和
例如,对于案例Name:A
和Activity:TT
将给出7
然后,我想以交叉表的形式展示它,它是根据月份
和活动
分组的,如下所示
Month
1 2 3
TT UU TT UU TT UU
A 7 1 0 1 0 1
B 0 0 0 0 40 0
C 0 10 0 0 0 0
D 5 0 6 0 0 0
我可以知道使用pandas交叉表是否可以直接实现这一点吗
p、 在美国,类似但不同的话题被分开讨论。请让我知道,考虑到以下df,此线程是否被视为OP的副本:
In [93]: df
Out[93]:
Name Activity Hour Month
0 A TT 5 1
1 A TT 2 1
2 A UU 1 1
3 A UU 1 2
4 A UU 1 3
5 B TT 40 3
6 C UU 10 1
7 D TT 2 2
8 D TT 2 2
9 D TT 2 2
10 D TT 5 1
解决方案:1如果您想使用,可以执行以下操作:
In [92]: pd.crosstab(df.Name, columns=[df.Month, df.Activity], values=df.Hour, aggfunc='sum').fillna(0)
Out[92]:
Month 1 2 3
Activity TT UU TT UU TT UU
Name
A 7.0 1.0 0.0 1.0 0.0 1.0
B 0.0 0.0 0.0 0.0 40.0 0.0
C 0.0 10.0 0.0 0.0 0.0 0.0
D 5.0 0.0 6.0 0.0 0.0 0.0
解决方案:2
您可以使用:
考虑以下因素:
In [93]: df
Out[93]:
Name Activity Hour Month
0 A TT 5 1
1 A TT 2 1
2 A UU 1 1
3 A UU 1 2
4 A UU 1 3
5 B TT 40 3
6 C UU 10 1
7 D TT 2 2
8 D TT 2 2
9 D TT 2 2
10 D TT 5 1
解决方案:1如果您想使用,可以执行以下操作:
In [92]: pd.crosstab(df.Name, columns=[df.Month, df.Activity], values=df.Hour, aggfunc='sum').fillna(0)
Out[92]:
Month 1 2 3
Activity TT UU TT UU TT UU
Name
A 7.0 1.0 0.0 1.0 0.0 1.0
B 0.0 0.0 0.0 0.0 40.0 0.0
C 0.0 10.0 0.0 0.0 0.0 0.0
D 5.0 0.0 6.0 0.0 0.0 0.0
解决方案:2
您可以使用:
您还可以使用
groupby
作为上一个问题
df_final = df.groupby(['Month','Activity','Name']).Hour.sum().unstack([0,1], fill_value=0)
Out[338]:
Month 1 2 3
Activity TT UU TT UU TT UU
Name
A 7 1 0 1 0 1
B 0 0 0 0 40 0
C 0 10 0 0 0 0
D 5 0 6 0 0 0
您还可以使用
groupby
作为上一个问题
df_final = df.groupby(['Month','Activity','Name']).Hour.sum().unstack([0,1], fill_value=0)
Out[338]:
Month 1 2 3
Activity TT UU TT UU TT UU
Name
A 7 1 0 1 0 1
B 0 0 0 0 40 0
C 0 10 0 0 0 0
D 5 0 6 0 0 0
谢谢,我从来不知道pivot_表和crosstab可以用来做相同的演示。很好的展示是的,它们非常相似。很高兴提供帮助。谢谢,我从来不知道pivot_table和crosstab可以用来做相同的演示。很好的展示是的,它们非常相似。很乐意帮忙。