考虑以下:
>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame(np.random.randn(5,2),index=[100,101,102,103])
>>> idx = set(df.index)
>>> for id_ in idx:
... slice = df.loc[id_]
... # stuff with slice
>>>
我需要在for循环中对slice进行处理,但是该操作是基于slice为DataFrame的.如果有多个匹配记录,则slice是一个DataFrame,否则为Series.我知道pandas.Series具有Series.to_frame方法,但pandas.DataFrame没有(所以我不能只调用df.loc [id _].to_frame()).
测试并将片段强制转换为DataFrame的最佳方法是什么?
(真的和测试isinstance(df.loc [id_],pd.Series)一样简单吗?)
最佳答案
您可以按索引(级别= 0)按
groupby
对象循环:
for i,df1 in df.groupby(level=0):
print (df1)
0 1
100 -0.812375 -0.450793
0 1
101 1.070801 0.217421
101 -1.175859 -0.926117
0 1
102 -0.993948 0.586806
0 1
103 1.063813 0.237741
您的解决方案应通过选择double []作为返回DataFrame来更改:
idx = set(df.index)
for id_ in idx:
df1 = df.loc[[id_]]
print (df1)
0 1
100 -0.775057 -0.979104
0 1
101 -1.549363 -1.206828
101 0.445008 -0.173086
0 1
102 1.488947 -0.79252
0 1
103 1.838997 -0.439362