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