将数据帧的行与字符串列结合起来
问题描述:
我认为这很简单,但我今天无法弄清楚这一点,需要一些帮助。将数据帧的行与字符串列结合起来
我有一个熊猫数据帧:
df = pd.DataFrame({
'id': [0, 0, 1, 1, 2],
'q.name':['A'] * 3 + ['B'] * 2,
'q.value':['A1','A2','A3','B1','B2'],
'w.name':['Q', 'W', 'E', 'R', 'Q'],
'w.value':['B1','B2','C3','C1','D2']
})
,看起来像这样
id q.name q.value w.name w.value
0 0 A A1 Q B1
1 0 A A2 W B2
2 1 A A3 E C3
3 1 B B1 R C1
4 2 B B2 Q D2
我期待将其转换为
id q.name q.value w.name w.value
0 0 A A A1 A2 Q W B1 B2
1 1 A B A3 B1 E R C3 C1
2 2 B B2 Q D2
我想pd.DataFrame(df.apply(lambda s: s.str.cat(sep=" ")))
但是这并没有给我想要的结果。我之前做过这些,但我正努力回想起来,或者在SO上找到任何帮助我的帖子。
更新: 我应该提到这之前:有没有办法做到这一点,而不指定哪一列? DataFrame基于上下文而改变。
我也更新了数据框,并显示了一个id
字段,因为我刚刚意识到这是可能的。我认为现在在id
领域的一个groupby应该解决这个问题。
答
UPDATE:
In [117]: df.groupby('id', as_index=False).agg(' '.join)
Out[117]:
id q.name q.value w.name w.value
0 0 A A A1 A2 Q W B1 B2
1 1 A B A3 B1 E R C3 C1
2 2 B B2 Q D2
老答案:
In [106]: df.groupby('category', as_index=False).agg(' '.join)
Out[106]:
category name
0 A A1 A2 A3
1 B B1 B2
[熊猫GROUPBY串联多列串]的可能的复制(https://stackoverflow.com/questions/ 32117848/pandas-groupby-concatenate-strings-in-multiple-columns) – Zero
和https://stackoverflow.com/q/23794082 – Zero
你能否通过addi更新问题将另一列添加到数据框及其结果?既然你不想指定列 – Dark