我有一个没有单个月份列的数据框。每个记录分为多个月列,这使我无法使用一个月列和金额列来趋势化数据。我无法从文档中找到任何提示,也无法找到其他有关如何完成此操作的问题。这是我创建示例数据框的代码:
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,而二月份为3。可以编写某种for循环来完成此操作吗?
预期的示例数据框:
pd.DataFrame(data, columns=[‘Name’, ‘month’, ‘Amount’])
仅对先前的数据进行操作以适合上述格式。
答案 0 :(得分:1)
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'}