我有一个熊猫数据框A
,列keywords
为
(此处Im仅显示4行,但实际上有数百万行):-
keywords
['loans','mercedez','bugatti']
['trump','usa']
['galaxy','7s','canon','macbook']
['beiber','spiderman','marvels','ironmen']
我想对keywords
列中列表元素的总数求和并将其存储到某个变量中。
total_sum=elements in keywords[0]+elements in keywords[1]+elements in
keywords[2]+elements in keywords[3]
total_sum=3+2+4+4
total_sum=13
我如何在大熊猫中做到这一点?
答案 0 :(得分:6)
使用sum
和map
:
sum(map(len, df.keywords))
样本
df = pd.DataFrame({
'keywords': [['a', 'b', 'c'], ['c', 'd'], ['a', 'b', 'c', 'd'], ['g', 'h', 'i']]
})
sum(map(len, df.keywords))
12
时间
df = pd.concat([df]*10000)
%timeit sum(map(len, df.keywords))
1.87 ms ± 52.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit df.keywords.map(len).sum()
13.5 ms ± 661 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit df.keywords.str.len().sum()
14.3 ms ± 272 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
验证
>>> sum(map(len, df.keywords)) == df.keywords.map(len).sum() == df.keywords.str.len().sum()
True
免责声明:在包含列表的列上使用pandas
方法总是效率低下的(这就是为什么在这里使用非熊猫方法要快得多的原因),因为DataFrames并非旨在存储list
。您应尽可能避免这种情况。
答案 1 :(得分:4)
IIUC
df = pd.DataFrame()
df['keywords']=[['loans','mercedez','bugatti'],
['trump','usa'],
['galaxy','7s','canon','macbook'],
['beiber','spiderman','marvels','ironmen']]
然后juse使用str.len
和sum
df.keywords.str.len().sum()
详细信息:
df.keywords.str.len()
0 3
1 2
2 4
3 4
Name: keywords, dtype: int64
Ps:如果您有strings
看起来像列表,请使用ast.literal_eval
首先转换为列表。
df.keywords.transform(ast.literal_eval).str.len().sum()
答案 2 :(得分:4)
您可以尝试以下一种方法:
df.keywords.map(len).sum()
答案 3 :(得分:0)
答案 4 :(得分:0)
方法1:
len([item for sublist in df.keywords for item in sublist]
方法2:
df.keywords.apply(len).sum()
。
df = [{"item": "a", "item_price": [1,1.5,2]}, {"item": "b", "item_price": [0.5,0.75,1]}]
df = pd.DataFrame(df)
print(df)
print("Ans:",len([item for sublist in df.item_price for item in sublist]))
输出
df
item item_price
0 a [1, 1.5, 2]
1 b [0.5, 0.75, 1]
Ans:6
答案 5 :(得分:0)
更像是列表变平的问题
import itertools
len(list(itertools.chain(*df.keywords.values.tolist())))
Out[57]: 13