pandas - 从多月列创建新观察
问题描述
我有一个没有一个月列的数据框。它为每条记录分为多个月份列,这使我无法使用单个月份列和金额列对数据进行趋势分析。我无法从文档或其他问题中找到有关如何完成此操作的任何提示。这是我创建示例数据框的代码:
import pandas as pd
data = [['tom', 1, 3, 4], ['nick', 5, 6, 7], ['juli', 6, 15, 10]]
df = pd.DataFrame(data, columns = ['Name', 'mon1', 'mon2', 'mon3'])
我想要一个数据框,它有一个单月列,其中 mon1 作为一月 mon2 作为二月,mon3 作为三月。我还希望数据框将用唯一月份标识的数字放入金额列中。我希望观察的数量是 9 而不是 3。例如,汤姆将有三个独特的观察值,因为在 1 月份他的数量为 1,而 2 月份为 3。是否可以编写某种 for 循环来完成此操作?
预期的示例数据框:
pd.DataFrame(data, columns=[‘Name’, ‘month’, ‘Amount’])
仅对以前的数据进行处理以适应上述格式。
解决方案
IIUC,您可以尝试以下方法:
import calendar
d={'mon'+str(e):i for e,i in enumerate(list(calendar.month_name))}
df_new=df.rename(columns=d).melt('Name',var_name='Month',value_name='Amount')
print(df_new)
Name Month Amount
0 tom January 1
1 nick January 5
2 juli January 6
3 tom February 3
4 nick February 6
5 juli February 15
6 tom March 4
7 nick March 7
8 juli March 10
笔记:print(d)
{'mon0': '',
'mon1': 'January',
'mon2': 'February',
'mon3': 'March',
'mon4': 'April',
'mon5': 'May',
'mon6': 'June',
'mon7': 'July',
'mon8': 'August',
'mon9': 'September',
'mon10': 'October',
'mon11': 'November',
'mon12': 'December'}
推荐阅读
- python - 视频系统未初始化错误,即使已初始化
- c++ - clang 编译的程序在 std::any_cast 期间抛出 std::bad_any_cast
- java - 使用 servlet 搜索数据库
- php - WordPress:无法删除“ob_end_flush()”中的缓冲区 zlib 输出压缩
- java - 为什么存储在 arrayList 中的每个对象的内容具有相同的值?
- javascript - 我不断收到此错误,这是我使用的代码。错误每个 then() 应该返回一个值或抛出
- bash - 如何使用管道命令创建屏幕
- php - php中通过curl发送数据的问题
- javascript - 如何在创建具有相似结构的新对象时递归迭代 JS 对象?
- php - 在php中将十进制转换为字符串