因此,我的数据集有n个日期的位置信息。问题是每个日期实际上都是不同的列标题。例如,CSV看起来像
地点名称2010年1月2010年2月2010年3月
“测试”12 20 30
B“foo”18 20 25
我想让它看起来像
位置名称日期值
A“测试”2010年1月12日
A“测试”2010年2月20日
A“测试”2010年3月30日
B“福”2010年1月18日
B“福”2010年2月20日
B“福”2010年3月25日
问题是我不知道该列中有多少个日期(尽管我知道它们总是从name之后开始)
更新
从v0.20开始,melt是一个一阶函数,您现在可以使用
df.melt(id_vars=[“位置”,“名称”],
var_name=“日期”,
value_name=“value”)
位置名称日期值
0“测试”2010年1月12日
1 B“富”2010年1月18日
2 A“测试”2010年2月20日
3 B“福”2010年2月20日
4 A“测试”2010年3月30日
5 B“富”2010年3月25日
旧(ER)版本:<;0.20
您可以使用pd.melt获取大部分信息,然后进行排序:
>&燃气轮机&燃气轮机;df
地点名称2010年1月2010年2月2010年3月
0 A测试12 20 30
1乙富18 20 25
&燃气轮机&燃气轮机&燃气轮机;df2=pd.melt(df,id_vars=[“位置”,“名称”],
var_name=“Date”,value_name=“value”)
&燃气轮机&燃气轮机&燃气轮机;df2
位置名称日期值
0 A测试2010年1月12日
1 B foo 2010年1月18日
2 A测试2010年2月20日
3 B foo 2010年2月20日
4 A测试2010年3月30日
5 B富2010年3月25日
&燃气轮机&燃气轮机&燃气轮机;df2=df2.sort([“位置”,“名称”])
&燃气轮机&燃气轮机&燃气轮机;df2
位置名称日期值
0 A测试2010年1月12日
2 A测试2010年2月20日
4 A测试2010年3月30日
1 B foo 2010年1月18日
3 B foo 2010年2月20日
5 B富2010年3月25日
(可能需要加入.reset\u索引(drop=True),以保持输出干净。)
注意:pd.DataFrame.sort已被弃用,取而代之的是pd.DataFrame.sort\u值