我们正在使用Python 2.7
我们在下面有一个简单的表格:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo polar bear'.split(),
'B': '1 1 2 3 2 2 1 3 4 5'.split()})
print(df)
生成
A B
0 foo 1
1 bar 1
2 foo 2
3 bar 3
4 foo 2
5 bar 2
6 foo 1
7 foo 3
是否有任何Pandas方式可以匹配ID
列中的A
?例如,如果列ID
中的A
相同,则将第二行连接到字典或列表中。例如:
{'foo,12213','bar,132'}
谢谢!
答案 0 :(得分:1)
你想要的输出有点模糊 - 你提到字典和列表,然后给出一个包含字符串的集合 - 但如果你只关心匹配的信息而不是它所在的格式,那么IIUC,你可以使用{ {1}}。如果B由字符串组成(就像在示例框架中那样),那么很简单:
groupby
如果B由整数组成,我们必须将它们转换为字符串,可能使用
之类的东西>>> df.groupby("A")["B"].sum()
A
bar 132
bear 5
foo 12213
polar 4
Name: B, dtype: object
>>> dict(df.groupby("A")["B"].sum())
{'polar': '4', 'bar': '132', 'foo': '12213', 'bear': '5'}
我建议您阅读split-apply-combine pattern上的文档。
答案 1 :(得分:1)
你可以通过聚合来列出并加入列表,如下所示。
df
Out[7]:
A B
0 foo 1
1 bar 1
2 foo 2
3 bar 3
4 foo 2
5 bar 2
6 foo 1
7 foo 3
df.groupby("A")["B"].apply(list)
Out[10]:
A
bar [1, 3, 2]
foo [1, 2, 2, 1, 3]
new_df = df.groupby("A")["B"].apply(list).reset_index()
new_df['B'] = new_df['B'].map(lambda x: ''.join([str(i) for i in x]))
A B
0 bar 132
1 foo 12213
new_df.set_index("A").to_dict()
Out[34]: {'B': {'bar': '132', 'foo': '12213'}}