gpt4 book ai didi

python - 在字符串的 pandas 数据框中查找值计数

转载 作者:行者123 更新时间:2023-11-28 19:42:28 25 4
gpt4 key购买 nike

我想获取列中字符串的频率计数。一方面,这类似于将数据框折叠成一组仅反射(reflect)列中字符串的行。我能够通过循环解决这个问题,但我知道还有更好的解决方案。

例子 df:

       2017-08-09  2017-08-10
id
0 pre pre
2 active_1-3 active_1
3 active_1 active_1
4 active_3-7 active_3-7
5 active_1 active_1

想出去:

       2017-08-09  2017-08-10
pre 1 1
active_1 2 3
active_1-3 3 0
active_3-7 1 1

我搜索了很多论坛,但找不到好的答案。

我假设 pivot_table 方法是正确的方法,但无法获得正确的参数来折叠没有输出 df 的明显索引的表。

我能够通过遍历每一列、使用 value_counts() 并将每个值计数系列附加到新的数据框中来实现这一点,但我知道有更好的解决方案。

for i in range(len(date_cols)):
new_values = df[date_cols[i]].value_counts()
output_df = pd.concat([output_df , new_values], axis=1)

谢谢!

最佳答案

您可以使用 value countspd.Series(感谢 Jon 的改进)即

ndf = df.apply(pd.Series.value_counts).fillna(0)
           2017-08-09  2017-08-10active_1             2         3.0active_1-3           1         0.0active_3-7           1         1.0pre                  1         1.0

Timings:

k = pd.concat([df]*1000)
# @cᴏʟᴅsᴘᴇᴇᴅ's method
%%timeit
pd.get_dummies(k.T).groupby(by=lambda x: x.split('_', 1)[1], axis=1).sum().T
1 loop, best of 3: 5.68 s per loop


%%timeit
# @cᴏʟᴅsᴘᴇᴇᴅ's method
k.stack().str.get_dummies().sum(level=1).T
10 loops, best of 3: 84.1 ms per loop

# My method
%%timeit
k.apply(pd.Series.value_counts).fillna(0)
100 loops, best of 3: 7.57 ms per loop

# FabienP's method
%%timeit
k.unstack().groupby(level=0).value_counts().unstack().T.fillna(0)
100 loops, best of 3: 7.35 ms per loop

#@Wen's method (fastest for now)
pd.concat([pd.Series(collections.Counter(k[x])) for x in df.columns],axis=1)
100 loops, best of 3: 4 ms per loop

关于python - 在字符串的 pandas 数据框中查找值计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46863602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com