加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python-当切片有一行结果时返回pandas.DataFrame

发布时间:2020-12-17 17:35:40 所属栏目:Python 来源:网络整理
导读:考虑以下: 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进行处理,但是该操作

考虑以下:

>>> 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具有Seri??es.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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读