首页 > 解决方案 > 如何一次将熊猫数据框分成n个子列表?

问题描述

我有一个由推文及其作者组成的数据框,共有 45 位作者。我想一次将数据框分成 2 个作者的组,以便以后可以将它们导出到 csv 文件中。

我尝试使用以下内容:(假设作者位于名为“B”的列中,而推文位于名为“A”的列中)

我从这个问题中得到了以下内容

df.set_index(keys=['B'],drop=False,inplace=True)
authors = df['B'].unique().tolist()

为了分隔列表:

dgroups =[]
for i in range(0,len(authors)-1,2):
    dgroups.append(df.loc[df.B==authors[i]])
    dgroups.extend(df.loc[df.B ==authors[i+1]])

但相反,它给了我这样的子列表:

dgroups = [['A'],['B'],

       [tweet,author],

       ['A'],['B'],

       [tweet,author2]]

在此之前,我能够将它们正确地划分为从上一个链接1派生的 45 个子列表,如下所示:

for i in authors:
    groups.append(df.loc[df.B==i])

那么我将如何为 2 位作者或 3 位作者或类似的那样做呢?

编辑:来自@Jonathan Leon 的回答,我想我会做以下事情,这有效但不是动态解决方案,而且我猜效率低下,特别是如果 n>3 :

dgroups= []
for i in range(2,len(authors)+1,2):
    tempset1=[]
    tempset2=[]
    tempset1 = df.loc[df.B==authors[i-2]]
    if(i-1 != len(authors)):
        tempset2=df.loc[df.B ==authors[i-1]]
        dgroups.append(tempset1.append(tempset2))
    else:
        dgroups.append(tempset1)

标签: pythonpandas

解决方案


这会错误地导入外语,但逻辑可以为每两个作者创建一个新的 csv。

pd.read_csv('TrainDataAuthorAttribution.csv')
# df.groupby('B').count()

authors=df.B.unique().tolist()
auths_in_subset = 2
for i in range(auths_in_subset, len(authors)+auths_in_subset, auths_in_subset):
    # print(authors[i-auths_in_subset:i])
    dft = df[df.B.isin(authors[i-auths_in_subset:i])]
    # print(dft)
    dft.to_csv('df' + str(i) + '.csv')

推荐阅读