Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于迭代规则隔离数据帧的多行_Python_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

Python 基于迭代规则隔离数据帧的多行

Python 基于迭代规则隔离数据帧的多行,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,假设我有一个 X Y 0 1 1 1 1 2 2 1 3 3 2 4 4 2 5 5 2 6 6 3 7 7 3 8 8 3 9 我希望我的新数据帧是这样的,对于X的每个唯一值,即1、2和3,我隔离Y最小的行。所以我希望我的最终数据帧看起来像: X Y 0 1 1 1 2 4 2 3 7 我熟悉如何获得X的每个唯一值。它将是df['X'].unique()。因此,我的天真做法最初只是: X_list = [] for i in df['X'].unique(): i_df =

假设我有一个

  X Y
0 1 1
1 1 2
2 1 3
3 2 4
4 2 5
5 2 6
6 3 7
7 3 8
8 3 9
我希望我的新数据帧是这样的,对于X的每个唯一值,即1、2和3,我隔离Y最小的行。所以我希望我的最终数据帧看起来像:

  X Y
0 1 1
1 2 4
2 3 7
我熟悉如何获得X的每个唯一值。它将是
df['X'].unique()
。因此,我的天真做法最初只是:

X_list = []
for i in df['X'].unique():
    i_df = df.loc[df['X'] == i]
    X_list.append(i_df.loc[i_df['Y'].idxmin()])
new_df = pd.DataFrame(X_list)
然而,这会带来问题,因为如果您试图通过创建新的数据帧将这些孤立的行合并在一起,索引就会变得一团糟。也就是说,如果我试图通过旧数据帧中的原始索引访问新数据帧中的这些行,我会得到一个键错误,这表明这样一个索引行不存在。我最初尝试用
reset\u index
函数来解决这个问题,但也没有成功


因此,我想知道是否有一些干净的方法可以从原始数据帧中查询这个问题,或者我的解决方案是否有一个扩展,可以让它像您期望的那样从数据帧中工作,而不会出现奇怪的索引问题。我怀疑使用
groupby
函数可能有某种方法可以做到这一点,但我真的想不出是如何做到的。

您认为groupby是一种方法是正确的。
df.groupby(['X']).min()
您可以将
min
替换为其他聚合函数,例如
count
max
sum

以下是一些可能有效的方法。在您的情况下,设置
find_max=False

导入熊猫
进口经营者
def筛选器_df(df=None,col=None,find_max=True):
"""
通过优化另一列来序列化一列。返回
另一个dataframe。序列化列可能未排序。
"""
如果不是df或非col:通过
如果find_max:evaluate=operator.ge
如果未找到_max:evaluate=operator.le
d={}
对于df.items中的行:
如果行不在d.keys()中:
d[行]=df.loc[行]
elif评估(df.loc[行][col],d[行][col]):
d[行]=df.loc[行]
返回数据帧(d)

使用
GroupBy.min

df.groupby('X')['Y'].min().reset_index()

让你的答案
df.groupby('X')['Y'].min().reset_index()
,我可以投赞成票,我同意@Erfan会自己发布的,那么我想@OrrenRavidI确实很欣赏你的方法,但是我认为@Erfan建议的一行代码更符合我的目的。Np,有意义在数据帧上进行操作只是作为最后的手段。矢量化解决方案是一条出路。精读it@Erfan我想这就是为什么
DataFrame
没有用于行的无参数pop方法的原因。。。(编辑:据我所知)