python - 使用 Pandas 将列转换为行

标签 python pandas

所以我的数据集包含 n 个日期的一些位置信息。问题是每个日期实际上是不同的列标题。例如,CSV 看起来像

location    name    Jan-2010    Feb-2010    March-2010
A           "test"  12          20          30
B           "foo"   18          20          25

我想要的是它看起来像

location    name    Date        Value
A           "test"  Jan-2010    12       
A           "test"  Feb-2010    20
A           "test"  March-2010  30
B           "foo"   Jan-2010    18       
B           "foo"   Feb-2010    20
B           "foo"   March-2010  25

我的问题是我不知道该列中有多少个日期(尽管我知道它们总是在名称之后开始)

最佳答案

更新
从 v0.20 开始,melt是一阶函数,您现在可以使用

df.melt(id_vars=["location", "name"], 
        var_name="Date", 
        value_name="Value")

  location    name        Date  Value
0        A  "test"    Jan-2010     12
1        B   "foo"    Jan-2010     18
2        A  "test"    Feb-2010     20
3        B   "foo"    Feb-2010     20
4        A  "test"  March-2010     30
5        B   "foo"  March-2010     25
<小时/>

旧(ER)版本:<0.20

您可以使用pd.melt到达那里的大部分路径,然后排序:

>>> df
  location  name  Jan-2010  Feb-2010  March-2010
0        A  test        12        20          30
1        B   foo        18        20          25
>>> df2 = pd.melt(df, id_vars=["location", "name"], 
                  var_name="Date", value_name="Value")
>>> df2
  location  name        Date  Value
0        A  test    Jan-2010     12
1        B   foo    Jan-2010     18
2        A  test    Feb-2010     20
3        B   foo    Feb-2010     20
4        A  test  March-2010     30
5        B   foo  March-2010     25
>>> df2 = df2.sort(["location", "name"])
>>> df2
  location  name        Date  Value
0        A  test    Jan-2010     12
2        A  test    Feb-2010     20
4        A  test  March-2010     30
1        B   foo    Jan-2010     18
3        B   foo    Feb-2010     20
5        B   foo  March-2010     25

(可能需要添加 .reset_index(drop=True),只是为了保持输出干净。)

注意:pd.DataFrame.sort has been deprecated支持pd.DataFrame.sort_values .

关于python - 使用 Pandas 将列转换为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58969887/

相关文章:

python - 在 HDF 存储中构建数据结构

python - 静态变量可以在python中声明为私有(private)吗?

python - 使用与 Amazon RDS 的 MySQLdb SSL 连接获取空 'Ssl_cipher'

python-3.x - 获取 pd.DataFrame 中的所有 str 类型元素

python - 检查行值 value 是否等于列名并访问该列的值

python-2.7 - 从以元组为键的字典中获取 Pandas 数据框

python - 评估排序的 pandas 数据帧的相等性未按预期运行

python - 在 python 脚本中,如何忽略 Apache Pig 的独立单元测试的 Python 装饰器

python - 将字典映射到数据框无法正常工作

python - 如何从两个具有相同键值的字典创建一个 pandas 数据框?