Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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 如何基于for循环中列的唯一值对数据帧进行切片,并将每个切片传递给函数?_Python_Pandas - Fatal编程技术网

Python 如何基于for循环中列的唯一值对数据帧进行切片,并将每个切片传递给函数?

Python 如何基于for循环中列的唯一值对数据帧进行切片,并将每个切片传递给函数?,python,pandas,Python,Pandas,假设我想要有一个for循环,它在每次迭代中都会根据一列的唯一值(比如a)对一个大的数据帧df)进行切片,然后将这个切片的数据帧传递给一个函数,该函数将一个数据帧作为参数,比如fun(df)。基本上,fun(df)将在for循环的每次迭代中获得一个新的切片数据帧。 对于eg,让我们假设以下是我的数据帧: A B C D 1-1 an at 23 1-2 ab can 34 1-2 van bit 45 1-2 vd sun 23 1-1 so am

假设我想要有一个
for循环
,它在每次迭代中都会根据一列的唯一值(比如
a
)对一个大的
数据帧
df
)进行切片,然后将这个切片的数据帧传递给一个函数,该函数将一个数据帧作为参数,比如
fun(df)
。基本上,
fun(df)
将在for循环的每次迭代中获得一个新的切片数据帧。 对于eg,让我们假设以下是我的数据帧:

A    B    C    D
1-1  an  at   23
1-2  ab  can  34
1-2  van bit  45
1-2  vd  sun  23
1-1  so  am   12
...
现在,for循环的第一次迭代将下面的数据帧传递给
fun(df)

下一次迭代将把这个传递给
fun(df)

等等等等

for循环的迭代次数应等于唯一值“A”的次数。在这种情况下,它将是2


如何在python中实现这一点?我不熟悉它,不知道如何进一步操作。

使用
pandas.DataFrame.groupby
,它返回一个iterable对象

def fun(data):
    # pseudo function for a test
    print(data)

for k, d in df.groupby('A'):
    fun(d)
输出:

     A   B   C   D
0  1-1  an  at  23
4  1-1  so  am  12

     A    B    C   D
1  1-2   ab  can  34
2  1-2  van  bit  45
3  1-2   vd  sun  23
Insight

pandas.DataFrame.groupby
返回
((键,按数据帧分组),…)

在df.groupby('A')中k、d的
行中,
k
d
用于解压缩返回的iterable。由于您所需的输出没有使用该键(即
1-1
1-2
,…),因此答案也是如此

答案中的
fun
表示任何假设函数。
正如问题中提到的,
fun
是一个函数,它将在for循环的每次迭代中获得一个新的切片数据帧。在这种情况下,它是一个简单的
打印
函数,可以直观地表示df.groupby
返回的内容。

使用
pandas.DataFrame.groupby
,它返回一个iterable对象

def fun(data):
    # pseudo function for a test
    print(data)

for k, d in df.groupby('A'):
    fun(d)
输出:

     A   B   C   D
0  1-1  an  at  23
4  1-1  so  am  12

     A    B    C   D
1  1-2   ab  can  34
2  1-2  van  bit  45
3  1-2   vd  sun  23
Insight

pandas.DataFrame.groupby
返回
((键,按数据帧分组),…)

在df.groupby('A')中k、d的
行中,
k
d
用于解压缩返回的iterable。由于您所需的输出没有使用该键(即
1-1
1-2
,…),因此答案也是如此

答案中的
fun
表示任何假设函数。
正如问题中提到的,
fun
是一个函数,它将在for循环的每次迭代中获得一个新的切片数据帧。在这种情况下,这是一个简单的
print
函数,可以直观地表示
df.groupby
返回的内容。

请详细说明
func(data)
到底在做什么,以及for循环中的k和d是什么。@Prachi更新了答案。如果有任何部分仍然不清楚,请告诉我:)
@Chris
你能告诉我如何将所有这些数据帧组合起来吗
fun(df)
在每次迭代后都会返回到另一个数据帧。@Prachi try
pd.concat([func(d)for uud,df.groupby('A')])
它进入了无限循环:(你能详细说明什么是
func(数据)
以及for循环中的k和d是什么吗。@Prachi更新了答案。如果有任何部分不清楚,请告诉我:)
@Chris
你能告诉我如何组合所有这些
有趣(df)的数据帧吗
将在每次迭代后返回到另一个数据帧。@Prachi try
pd.concat([func(d)for ud,df.groupby('A')])
它进入无限循环:(