如何在不使用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)
答案 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