python数据框在计数器字段上循环

发布于 2025-02-13 11:14:19 字数 939 浏览 1 评论 0原文

我想构建一个循环,该函数将在“计数器”字段上循环创建子集数据框架,然后将它们重新加入

以下是我想要的一个示例,实际上,计数器可以在数百个:

data = {'name': ['Adam','Adam','Adam','Adam', 'nick','nick','nick','nick','nick','krish','krish','krish',],
        'age': [20,20,20,20, 21,21,21,21,21, 19,19,19],
        'Product': ['A','B','C','D','A','B','C','D','E','A','B','C'],
        'Counter': [1,2,3,4,1,2,3,4,5,1,2,3]}
 
# Create DataFrame
df = pd.DataFrame(data)
 
df1 = df.loc[df['Counter'] == 1]

df1 = df1[['name','age','Product']]

df2 = df.loc[df['Counter'] == 2]

df2 = df2[['name','age','Product']]

df3 = df.loc[df['Counter'] == 3]

df3 = df3[['name','age','Product']]

df4 = df.loc[df['Counter'] == 4]

df4 = df4[['name','age','Product']]

df5 = df.loc[df['Counter'] == 5]

df5 = df5[['name','age','Product']]

dfs = [df1,df2,df3,df4,df5]

from functools import reduce
df_merged = reduce(lambda  left,right: pd.merge(left,right,on=['name'], how='outer'), dfs)

I would like to build a loop where the function will loop over the "counter" field creating subset dataframes and then join them back together

The below is a small example of what i want, in reality the counters can be in the hundreds:

data = {'name': ['Adam','Adam','Adam','Adam', 'nick','nick','nick','nick','nick','krish','krish','krish',],
        'age': [20,20,20,20, 21,21,21,21,21, 19,19,19],
        'Product': ['A','B','C','D','A','B','C','D','E','A','B','C'],
        'Counter': [1,2,3,4,1,2,3,4,5,1,2,3]}
 
# Create DataFrame
df = pd.DataFrame(data)
 
df1 = df.loc[df['Counter'] == 1]

df1 = df1[['name','age','Product']]

df2 = df.loc[df['Counter'] == 2]

df2 = df2[['name','age','Product']]

df3 = df.loc[df['Counter'] == 3]

df3 = df3[['name','age','Product']]

df4 = df.loc[df['Counter'] == 4]

df4 = df4[['name','age','Product']]

df5 = df.loc[df['Counter'] == 5]

df5 = df5[['name','age','Product']]

dfs = [df1,df2,df3,df4,df5]

from functools import reduce
df_merged = reduce(lambda  left,right: pd.merge(left,right,on=['name'], how='outer'), dfs)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

场罚期间 2025-02-20 11:14:19

我相信您要寻找的名为 df.pivot

x = df.pivot(index="name", columns="Counter")
x = x[sorted(x.columns, key=lambda x: (x[1], x[0]))]
x.columns = [f"{a}_{b}" for a, b in x.columns.values]

print(x)

打印:

      Product_1  age_1 Product_2  age_2 Product_3  age_3 Product_4  age_4 Product_5  age_5
name                                                                                      
Adam          A   20.0         B   20.0         C   20.0         D   20.0       NaN    NaN
krish         A   19.0         B   19.0         C   19.0       NaN    NaN       NaN    NaN
nick          A   21.0         B   21.0         C   21.0         D   21.0         E   21.0

I believe what you looking for is called df.pivot:

x = df.pivot(index="name", columns="Counter")
x = x[sorted(x.columns, key=lambda x: (x[1], x[0]))]
x.columns = [f"{a}_{b}" for a, b in x.columns.values]

print(x)

Prints:

      Product_1  age_1 Product_2  age_2 Product_3  age_3 Product_4  age_4 Product_5  age_5
name                                                                                      
Adam          A   20.0         B   20.0         C   20.0         D   20.0       NaN    NaN
krish         A   19.0         B   19.0         C   19.0       NaN    NaN       NaN    NaN
nick          A   21.0         B   21.0         C   21.0         D   21.0         E   21.0
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文