Nin*_*den 19 python group-by dataframe pandas
我在csv文件中有这样的数据
Symbol,Action,Year
AAPL,Buy,2001
AAPL,Buy,2001
BAC,Sell,2002
BAC,Sell,2002
Run Code Online (Sandbox Code Playgroud)
我能够像这样阅读它和groupby
df.groupby(['Symbol','Year']).count()
Run Code Online (Sandbox Code Playgroud)
我明白了
Action
Symbol Year
AAPL 2001 2
BAC 2002 2
Run Code Online (Sandbox Code Playgroud)
我希望这个(顺序无关紧要)
Action
Symbol Year
AAPL 2001 2
AAPL 2002 0
BAC 2001 0
BAC 2002 2
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能计算零出现率
jez*_*ael 19
你可以用pivot_table与unstack:
print df.pivot_table(index='Symbol',
columns='Year',
values='Action',
fill_value=0,
aggfunc='count').unstack()
Year Symbol
2001 AAPL 2
BAC 0
2002 AAPL 0
BAC 2
dtype: int64
Run Code Online (Sandbox Code Playgroud)
如果您需要输出作为DataFrame用途to_frame:
print df.pivot_table(index='Symbol',
columns='Year',
values='Action',
fill_value=0,
aggfunc='count').unstack()
.to_frame()
.rename(columns={0:'Action'})
Action
Year Symbol
2001 AAPL 2
BAC 0
2002 AAPL 0
BAC 2
Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 15
你可以用这个:
df = df.groupby(['Symbol','Year']).count().unstack(fill_value=0).stack()
print df
Run Code Online (Sandbox Code Playgroud)
输出:
Action
Symbol Year
AAPL 2001 2
2002 0
BAC 2001 0
2002 2
Run Code Online (Sandbox Code Playgroud)
数据类型类别
也许这个功能在这个线程打开时并不存在,但是数据类型“category”可以在这里提供帮助:
# create a dataframe with one combination of a,b missing
df = pd.DataFrame({"a":[0,1,1], "b": [0,1,0]})
df = df.astype({"a":"category", "b":"category"})
print(df)
Run Code Online (Sandbox Code Playgroud)
数据框看起来像这样:
a b
0 0 0
1 1 1
2 1 0
Run Code Online (Sandbox Code Playgroud)
现在,按 a 和 b 分组
print(df.groupby(["a","b"]).size())
Run Code Online (Sandbox Code Playgroud)
产量:
a b
0 0 1
1 0
1 0 1
1 1
Run Code Online (Sandbox Code Playgroud)
请注意最右边一列中的 0。此行为也记录在pandas 用户指南中(在页面上搜索“groupby”)。
| 归档时间: |
|
| 查看次数: |
9591 次 |
| 最近记录: |