python - 如何根据 Pandas 中的其他 df 创建特定的 DataFrame?
问题描述
我有如下数据框:
data = pd.DataFrame({"Country" : ["Brazil", "Brazil", "Germany", "Germany", "UK"],
"Order method" : ["Phone", "Retail", "Web", "Web", "Retail"]})
我想根据上面的数据框创建新的DataFrame,我希望看到如下结果:
解决方案
使用GroupBy.size
和Series.unstack
来DataFrame.stack
添加缺失的类别:
s = data.groupby(['Country','Order method']).size().unstack(fill_value=0).stack()
print (s)
Country Order method
Brazil Phone 1
Retail 1
Web 0
Germany Phone 0
Retail 0
Web 2
UK Phone 0
Retail 1
Web 0
dtype: int64
对于DataFrame
添加DataFrame.reset_index
:
df = (data.groupby(['Country','Order method'])
.size()
.unstack(fill_value=0)
.stack()
.reset_index(name='Count'))
print (df)
Country Order method Count
0 Brazil Phone 1
1 Brazil Retail 1
2 Brazil Web 0
3 Germany Phone 0
4 Germany Retail 0
5 Germany Web 2
6 UK Phone 0
7 UK Retail 1
8 UK Web 0
最后,如有必要,将重复值替换为空字符串,使用Series.mask
with Series.duplicated
:
df['Country'] = df['Country'].mask(df['Country'].duplicated(), '')
print (df)
Country Order method Count
0 Brazil Phone 1
1 Retail 1
2 Web 0
3 Germany Phone 0
4 Retail 0
5 Web 2
6 UK Phone 0
7 Retail 1
8 Web 0
推荐阅读
- c# - 在一定时间后取消 Task.WhenAll
- swift - SwiftUI:绑定@State 值的总和
- web - geotiff 不能与传单密谋
- php - PHP对子数组的子数组进行排序
- asp.net-core - 在 Linux 上运行的 ASP.NET Core 5 Web 应用程序 - 以与 www-data 不同的用户身份运行 ssh 命令
- matlab - Wilcoxon 符号秩检验 matlab 正秩和 T
- html - Can't center both vertically and horizontally
- plotly-dash - 如何在不使用回调的情况下更改 Dash 元素的内容?
- c++ - 从子类访问受保护变量时遇到问题
- r - R - 使用条件从 lm 对象的因子中提取系数