我正在努力尝试将我的数据框拆分为3个新的数据框,当供应商名称更改时会发生拆分。我搜索了现有问题。如何基于列行和Pandas&python拆分数据框:基于包含子字符串的列值将数据框拆分为许多数据框已接近,但我无法获得所需的输出。
以下是一个玩具数据集,用于说明我的问题:
df = pd.DataFrame({'Supplier': ['Supplier1', 'Supplier1', 'Supplier2', 'Supplier2', 'Supplier2', 'Supplier3','Supplier3'], 'Class' : ['A', 'A','A','A','A','B','B']})
我尝试了(失败了)
df1 = df.iloc[:df.index[df['Supplier'] == 'Supplier1'].tolist()[0]]
df2 = df.iloc[df.index[df['Supplier'] == 'Supplier2'].tolist()[0]+1:]
df3 = df.iloc[df.index[df['Supplier'] == 'Supplier3'].tolist()[0]+1:]
我想要达到的结果是:
Supplier Class
0 Supplier1 A
1 Supplier1 A
Supplier Class
0 Supplier2 A
1 Supplier2 A
2 Supplier2 A
Supplier Class
0 Supplier3 B
1 Supplier3 B
任何帮助,将不胜感激。谢谢!
更新:使用:
df1 = {i:group for i,group in df.groupby( df['Supplier'].ne(df['Supplier'].shift()).cumsum() )}
给出:
{1: Supplier Class
0 Supplier1 A
1 Supplier1 A, 2: Supplier Class
2 Supplier2 A
3 Supplier2 A
4 Supplier2 A, 3: Supplier Class
5 Supplier3 B
6 Supplier3 B}
我需要拆分为单独的数据框,所以我这样做了:
df3 = pd.DataFrame.from_dict({i:group for i,group in df1.groupby(df1['Supplier'].ne(df1['Supplier'].shift()).cumsum() )},orient='index', columns= ['Class'])
但是它给出了错误
df3 = pd.DataFrame.from_dict({i:group for i,group in df1.groupby(df1['Supplier'].ne(df1['Supplier'].shift()).cumsum() )},orient='index', columns= ['Class'])
AttributeError: 'dict' object has no attribute 'groupby'
我相信这可以实现您想要的拆分:
groups = [group.reset_index()[['Supplier', 'Class']] for _, group in df.groupby('Supplier')]
您可以通过以下方式获得示例的确切输出
for group in groups:
print(group)
输出:
Supplier Class
0 Supplier1 A
1 Supplier1 A
Supplier Class
0 Supplier2 A
1 Supplier2 A
2 Supplier2 A
Supplier Class
0 Supplier3 B
1 Supplier3 B
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句