python - Pandas:在没有 MultiIndex 的情况下重塑 DataFrame
问题描述
我需要重塑我的数据框
data = [
['Name 1', '17-11-2018', '2'],
['Name 2', '17-11-2018', '4'],
['Name 3', '17-11-2018', '6'],
['Name 1', '18-11-2018', '4'],
['Name 2', '18-11-2018', '6'],
['Name 3', '18-11-2018', '8'],
]
df = pd.DataFrame(data, columns = ['name', 'date', 'price'])
print(df)
product date price
0 Name 1 17-11-2018 2
1 Name 2 17-11-2018 4
2 Name 3 17-11-2018 6
3 Name 1 18-11-2018 4
4 Name 2 18-11-2018 6
5 Name 3 18-11-2018 8
我想得到这样的结果:
name 17-11-2018 18-11-2018
Name 1 2 4
Name 2 4 6
Name 3 6 8
但我最好的解决方案是 MultiIndex。
qty = pd.pivot_table(df, index='name', values='price', columns='date', aggfunc=np.sum, fill_value=0)
print(qty)
date 17-11-2018 18-11-2018
name
Name 1 2 4
Name 2 4 6
Name 3 6 8
需要一些建议或解决方案如何获得我需要的结果。
解决方案
您可以使用reset_index
重置索引和rename_axis
重命名列索引:
qty = pd.pivot_table(df, index='name', values='price', columns='date', aggfunc=np.sum, fill_value=0)\
.reset_index()\
.rename_axis(None, axis=1)
name 17-11-2018 18-11-2018
0 Name 1 2 4
1 Name 2 4 6
2 Name 3 6 8
如果你想name
作为索引,只使用rename_axis
:
qty = pd.pivot_table(df, index='name', values='price', columns='date', aggfunc=np.sum, fill_value=0)\
.rename_axis(None, axis=1)
17-11-2018 18-11-2018
name
Name 1 2 4
Name 2 4 6
Name 3 6 8
推荐阅读
- react-native-maps - 所有 firebase 库必须高于或低于 14.0.0 (react-native-maps & react-native-firebase)
- scala - 字符串在 Scala 中被错误地解析为日期时间格式
- angular - 为什么 Angular 调用我的函数……几十次?
- jenkins - 在多个阶段之间重用 Jenkins 中的代理(docker 容器)
- ssl - 旧 TLS1.0 客户端无法连接到自定义域上的 Google App Engine
- c++ - 在静态库(C++、Eclipse CDT)中使用#ifdef
- networkx - 如何更改使用 holoviews/bokeh 绘制的 networkx 图中的颜色?
- c++11 - c++ popen 使应用程序停止 30 秒
- sql - 在 T-SQL 中设置等于计数的列
- c++ - 在 decltype 中使用命名空间