迭代没有唯一值的python数据帧

时间:2017-03-05 19:17:51

标签: python pandas numpy

我在重新排列python中的数据帧时遇到了问题,这是从CSV文件到我需要它的方式。数据框中的数据是这样的:

ID      VOLUME      DATETIME

900     2.36        11/01/2015 13:40
900     2.30        11/01/2015 13:40
900     2.18        11/01/2015 13:41
900     2.30        11/01/2015 13:41
901     1.88        07/01/2015 17:01
901     1.80        07/01/2015 17:01
901     1.73        07/01/2015 17:02
901     1.80        07/01/2015 17:02

我已尝试各种方法将上述内容转移到我需要的方式,但由于字段没有真正的唯一值,我无法做到。我一直在想我需要用iterrows来得到它我需要的东西但是还没有能够解决它。 这就是我想要获取数据的方式:

    900↓    901↓

    2.36    1.88
    2.30    1.80
    2.18    1.73
    2.30    1.80

我正在尝试在ID列中显示每个项目的一列,但我真的开始在这一列上撞到墙上。我可以像上面那样创建一个新的数据帧,还是以错误的方式解决这个问题?

1 个答案:

答案 0 :(得分:0)

当您的ID具有不同的行数时,解决方案:

In [34]: df
Out[34]:
    ID  VOLUME          DATETIME
0  900    2.36  11/01/2015 13:40
1  900    2.30  11/01/2015 13:40
2  900    2.18  11/01/2015 13:41
3  900    2.30  11/01/2015 13:41
4  901    1.88  07/01/2015 17:01
5  901    1.80  07/01/2015 17:01
6  901    1.73  07/01/2015 17:02
7  901    1.80  07/01/2015 17:02
8  901    1.11  07/01/2015 17:03   # NOTE: i've intentionally added this row

In [35]: pd.DataFrame({k : pd.Series(v)
                       for k, v in df.groupby('ID').VOLUME.apply(list).to_dict().items()})
Out[35]:
    900   901
0  2.36  1.88
1  2.30  1.80
2  2.18  1.73
3  2.30  1.80
4   NaN  1.11

OLD回答:

试试这个:

In [12]: pd.DataFrame(df.groupby('ID').VOLUME.apply(list).to_dict())
Out[12]:
    900   901
0  2.36  1.88
1  2.30  1.80
2  2.18  1.73
3  2.30  1.80

或:

In [18]: pd.DataFrame(df.groupby('ID').VOLUME.apply(lambda x: x.values).to_dict())
Out[18]:
    900   901
0  2.36  1.88
1  2.30  1.80
2  2.18  1.73
3  2.30  1.80

注意:如果您的所有ID

的行数相同,则此功能将有效