这是我的数据框:
我想按 airline
对数据框进行排序,然后在此组中按 tweet_created
进行排序。 airline
和 tweet_created
是我数据框中的两列。我尝试了以下
df.groupby(['airline']).apply(lambda x: x.sort_values(['tweet_created'])).reset_index(drop = True)
但是出现此错误:
unhashable type: 'list'
我不明白这里出了什么问题。有人可以帮我吗?
答案 0 :(得分:0)
在示例数据框中,您的airline
系列由list
对象组成。由于list
是可变的且不可散列,因此不能用于分组操作。在内部,GroupBy
依赖于哈希。
假设airline
系列中的每个列表仅包含一个元素,则可以在分组之前转换数据。一种方法是通过itertools.chain
。
from itertools import chain
df = pd.DataFrame({'airline': [['VirginAmerica'], ['united'], ['USAirways']]})
df['airline'] = list(chain.from_iterable(df['airline']))
print(df)
airline
0 VirginAmerica
1 united
2 USAirways
一些替代方法的性能基准测试
# pandas v0.19.2, python 3.6.0
df = pd.concat([df]*1000, ignore_index=True)
%timeit list(chain.from_iterable(df['airline'])) # 228 µs per loop
%timeit np.concatenate(df['airline']) # 84.9 ms per loop
%timeit df['airline'].apply(pd.Series) # 817 ms per loop