Python 将多行数据转换为单列
我有一个数据帧Python 将多行数据转换为单列,python,pandas,Python,Pandas,我有一个数据帧 year month v_0 v_1 ... v_27 v_28 v_29 v_30 0 1919 03 0.0 0.0 ... 0.0 13.0 0.0 0.0 1 1919 04 5.0 0.0 ... 0.0 0.0 0.0 -9999.0 2 1919 05 0.0
year month v_0 v_1 ... v_27 v_28 v_29 v_30
0 1919 03 0.0 0.0 ... 0.0 13.0 0.0 0.0
1 1919 04 5.0 0.0 ... 0.0 0.0 0.0 -9999.0
2 1919 05 0.0 0.0 ... 0.0 0.0 0.0 0.0
标题为年、月和月内的每一天。我想将每天单独的标题转换为一列,这将是每个月的天数,后面是数据。应该是这样的
Year Month Day Value
1919 3 1 0
1919 3 2 0
您想使用DataFrame.melt(): 考虑以下数据帧df:
Year Month v_1 v_2
0 1901 2 4 8
1 1902 3 5 9
2 1903 4 6 10
3 1904 5 7 11
调用df.melt(id_vars=['Year','Month',var_name='Day')
会产生以下结果:
Year Month Day value
0 1901 2 v_1 4
1 1902 3 v_1 5
2 1903 4 v_1 6
3 1904 5 v_1 7
4 1901 2 v_2 8
5 1902 3 v_2 9
6 1903 4 v_2 10
7 1904 5 v_2 11
此处发生的情况是,melt将除年和月(id_变量)之外的所有列中的数据移动到一个新列“value”,列名称(v_0、v_1等)将成为一个称为“variable”的新列。我们可以使用var_name参数设置这个新列的名称,我已经在上面设置为“Day”
事实上,由于day列的名称以“v_”开头,我将首先重命名这些列:
df.rename(axis='columns', mapper=lambda s: s.split('_')[-1], inplace=True)
df.melt(id_vars=['Year', 'Month'], var_name='Day')
您可能需要检查
wide\u to\u long
pd.wide_to_long(df,'v',i=['year','month'],j='day',sep='_').reset_index()
Out[108]:
year month day v
0 1919 3 0 0.0
1 1919 3 1 0.0
2 1919 3 27 0.0
3 1919 3 28 13.0
4 1919 3 29 0.0
5 1919 3 30 0.0
6 1919 4 0 5.0
7 1919 4 1 0.0
8 1919 4 27 0.0
9 1919 4 28 0.0
10 1919 4 29 0.0
11 1919 4 30 -9999.0
12 1919 5 0 0.0
13 1919 5 1 0.0
14 1919 5 27 0.0
15 1919 5 28 0.0
16 1919 5 29 0.0
17 1919 5 30 0.0
请仅以文本形式发布框架。抱歉,现在刚刚发布。在他的数据基础上叠加OverflowBase是相当新的,你的一天变成了v_1,v_2…,之后你需要拆分melt@Wen我不明白你的意思。我的“Day”是一个基于所有其他列(问题中的v_1,v_2)的新列。名称“Day”取自var_name参数。您使用的数据框有不同的列名称。这非常有效。谢谢是的,使用上面的方法,我必须拆分才能得到一天number@Chinmay:我添加了一个不同的解决方案,该解决方案从重命名列开始;这比事后检查所有行要快。这同样有效。尽管我需要考虑如何分道扬镳number@Chinmay通过使用从宽到长,您不需要拆分它,它已经在函数中为您拆分了是的,不需要使用从宽到长进行拆分。谢谢