Python 转置和连接字符串

Python 转置和连接字符串,python,python-3.x,pandas,Python,Python 3.x,Pandas,如何在不使用for循环的情况下转置和连接数据帧 以下是输入数据: input_data = pandas.DataFrame({'a': ['fruit', 'fruit', 'fruit', 'food', 'food', 'food', 'food'], 'b': ['banana', '', 'apple', 'rice', '', 'yam', 'chicken']}) 结果输出应如下所示: result = pandas.DataFram

如何在不使用for循环的情况下转置和连接数据帧

以下是输入数据:

input_data =  pandas.DataFrame({'a': ['fruit', 'fruit', 'fruit', 'food', 'food', 'food', 'food'],
                      'b': ['banana', '', 'apple', 'rice', '', 'yam', 'chicken']})
结果输出应如下所示:

result = pandas.DataFrame({'a': ['fruit', 'food'],
                      'b': ['banana  apple', 'rice  yam  chicken']})
以下是我的for循环解决方案:

stuff_list = input_data.a.drop_duplicates().tolist()
result = pandas.DataFrame()

for s in stuff_list:
    step1 = input_data[input_data.a == s]
    step2 = ' '.join(step1.b.tolist())
    step3 = pandas.DataFrame({'a':[s], 'b':[step2]})
    result = result.append(step3)

print(result)

一种方法是按列
a
分组,并将字符串联接应用于列
b

(input_data.groupby('a', sort=False)['b']
           .apply(lambda x: ' '.join(x))
           .reset_index())

       a                  b
0  fruit      banana  apple
1   food  rice  yam chicken

请尝试分组方式:

>>> input_data.groupby('a')['b'].apply(lambda x: ' '.join(x)).reset_index()
       a                  b
0   food  rice  yam chicken
1  fruit      banana  apple
>>> 

如果使用
agg
,则不需要
lambda

input_data.groupby('a', sort=False).b.agg(' '.join).reset_index()

Out[2266]:
       a                  b
0  fruit      banana  apple
1   food  rice  yam chicken

更像是
agg

df.groupby('a',sort=False,as_index=False).agg(' '.join)
Out[539]: 
       a                  b
0  fruit      banana  apple
1   food  rice  yam chicken