转置和串联字符串

时间:2019-05-28 23:55:45

标签: 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.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)

4 个答案:

答案 0 :(得分:2)

更像agg

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

答案 1 :(得分:1)

一种方法是按列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

答案 2 :(得分:1)

尝试groupby

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

答案 3 :(得分:1)

如果您使用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