在没有唯一值的python数据帧中迭代
我在python中重新排列数据帧时遇到了麻烦,它是从CSV文件生成的,我需要它。数据帧中的数据如下所示:在没有唯一值的python数据帧中迭代,python,pandas,numpy,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
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列中每个项目显示一列,但我真的开始在这一列上撞到墙上了。我可以如上所述创建一个新的数据帧吗?还是我的做法是错误的?当您的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
旧答案:
试试这个:
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
或:
注意:如果您的
ID
的行数相同,那么这将起作用。对于具有不同行数的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
旧答案:
试试这个:
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
或:
注意:如果您的
ID
的行数相同,这将起作用。非常感谢。我正试图掌握dataframe,老实说,我花了一周的时间试图弄明白这一点。我的行有不同数量的ID,所以我很感激你覆盖了所有的途径,它甚至没有越过我的脑海。“OldManEast,很高兴我能帮助:”请考虑一个答案,如果你认为它已经回答了你的问题,非常感谢。我正试图掌握dataframe,老实说,我花了一周的时间试图弄明白这一点。我的行有不同数量的ID,所以我很感激你覆盖了所有的途径,它甚至没有越过我的脑海。“OldManEast,很高兴我能帮助:”请考虑一个答案,如果你认为它已经回答了你的问题。