pandas DataFrame用值作为元组进行dict

los*_*l29 5 python dictionary dataframe pandas

我有DataFrame如下:

In [23]: df = pandas.DataFrame({'Initial': ['C','A','M'], 'Sex': ['M', 'F', 'F'], 'Age': [49, 39, 19]})
         df = df[['Initial', 'Sex', 'Age']]
         df

Out[23]:   
  Initial Sex  Age
0       C   M   49
1       A   F   39
2       M   F   19
Run Code Online (Sandbox Code Playgroud)

我的目标是创建一个像这样的字典:

{'C': ('49', 'M'), 'A': ('39', 'F'), 'M': ('19', 'F')}
Run Code Online (Sandbox Code Playgroud)

目前,我这样做:

In [24]: members = df.set_index('FirstName', drop=True).to_dict('index')
         members

Out[24]: {'C': {'Age': '49', 'Sex': 'M'}, 'A': {'Age': '39', 'Sex': 'F'}, 'M': {'Age': '19', 'Sex': 'F'}}
Run Code Online (Sandbox Code Playgroud)

然后我使用dictcomprehrension将键的值格式化为元组而不是dicts:

In [24]: members= {x: tuple(y.values()) for x, y in members.items()}
         members

Out[24]: {'C': ('49', 'M'), 'A': ('39', 'F'), 'M': ('19', 'F')}
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法dict从大熊猫中获得我想要的格式DataFrame而不会引起额外的dict理解?

piR*_*red 10

这应该工作:

df.set_index('Initial')[['Age', 'Sex']].T.apply(tuple).to_dict()

{'A': (39, 'F'), 'C': (49, 'M'), 'M': (19, 'F')}
Run Code Online (Sandbox Code Playgroud)

  • 您可以将`axis = 1`传递给`apply()`而不是转置(`T`). (5认同)
  • 在某些版本(更新的?)下,使用 `T` 创建一个由字典组成的字典,如 `{'A': {'Age': 39, 'Sex': 'F'}, ...}`。而 `df.set_index('Initial')[['Age', 'Sex']].apply(tuple, axis=1).to_dict()` 生成所需的元组值字典。 (2认同)

unu*_*tbu 5

If lists instead of tuples are okay, then you could use:

In [45]: df.set_index('Initial')[['Age','Sex']].T.to_dict('list')
Out[45]: {'A': [39, 'F'], 'C': [49, 'M'], 'M': [19, 'F']}
Run Code Online (Sandbox Code Playgroud)