SBa*_*Bad 7 python group-by pandas
全部,
我的数据框中有一列,如下所示:
allHoldingsFund['BrokerMixed']
Out[419]:
78 ML
81 CITI
92 ML
173 CITI
235 ML
262 ML
264 ML
25617 GS
25621 CITI
25644 CITI
25723 GS
25778 CITI
25786 CITI
25793 GS
25797 CITI
Name: BrokerMixed, Length: 2554, dtype: object
Run Code Online (Sandbox Code Playgroud)
虽然列是一个对象。我无法按该列进行分组,甚至无法提取该列的唯一值。例如当我这样做时:
allHoldingsFund['BrokerMixed'].unique()
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
uniques = table.unique(values)
File "pandas/_libs/hashtable_class_helper.pxi", line 1340, in pandas._libs.hashtable.PyObjectHashTable.unique
TypeError: unhashable type: 'numpy.ndarray'
Run Code Online (Sandbox Code Playgroud)
当我进行分组时,我也遇到错误。
欢迎任何帮助。谢谢
您的数据列中有一个数组,您可以尝试以下操作
allHoldingsFund['BrokerMixed'].apply(lambda x: str(x)).unique()
Run Code Online (Sandbox Code Playgroud)
看起来您的系列中有一个 NumPy 数组。但是您无法对 NumPy 数组进行哈希处理pd.Series.unique,并且像 一样set依赖于哈希处理。
如果您不能确保您的系列数据仅由字符串组成,您可以在调用之前将 NumPy 数组转换为元组pd.Series.unique:
s = pd.Series([np.array([1, 2, 3]), 1, 'hello', 'test', 1, 'test'])
def tuplizer(x):
return tuple(x) if isinstance(x, (np.ndarray, list)) else x
res = s.apply(tuplizer).unique()
print(res)
array([(1, 2, 3), 1, 'hello', 'test'], dtype=object)
Run Code Online (Sandbox Code Playgroud)
当然,这意味着您的数据类型信息会在结果中丢失,但至少您可以看到“独特的”NumPy 数组,前提是它们是一维的。
首先我建议你检查一下type你的column. 您可以尝试如下
print (type(allHoldingsFund['BrokerMixed']))
Run Code Online (Sandbox Code Playgroud)
如果这是一个dataframe series,你可以尝试
allHoldingsFund['BrokerMixed'].reset_index()['BrokerMixed'].unique()
Run Code Online (Sandbox Code Playgroud)
并检查这是否适合您。
EDIT 2020:您获得独特和提到的答案的方法使用 Python 3 获取相同的结果
| 归档时间: |
|
| 查看次数: |
18298 次 |
| 最近记录: |