gpt4 book ai didi

python - 如何计算一个数据帧中的字符值并将其添加到另一个现有数据帧?

转载 作者:行者123 更新时间:2023-12-01 01:06:47 26 4
gpt4 key购买 nike

我有两个现有的 pandas 数据框。一个数据帧是大约 1000 个单词的列表。这是该数据框的头部:

0
0 abase
1 abate
2 abdicate
3 abduct
4 aberration

我的第二个数据框是一个空数据框,有 26 行和列,对应于字母表中的字母:

End     a   b   c   d   e   f   g   h   i   j   ...     q   r   s   t   u   v   w   x   y   z
Start
a 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
e 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
u 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0

对于第一个数据框中的每个单词,我应该辨别它们以什么字母开头和结尾,然后将 1 添加到空数据框中相应的行和列。

例如:abase 以“a”开头,以“e”结尾。因此,我需要将 1 添加到 e 和 a 在空数据帧上相遇的位置。我需要在整个第一个数据帧中系统地执行此操作,但我陷入困境。

我尝试使用开头和结尾:

values = (input[0].str.startswith(r'a') & input[0].str.endswith(r'e'))

这会正确返回一个 truefalse 值,但我不知道如何使用这些 bool 值添加到我的空数据帧中。

最好的做法是什么?我不允许使用除 stringnumpypandas 之外的任何库。

最佳答案

使用字符串方法获取第一个和最后一个字符,然后可能是crosstabpivotgroupbycrosstab 速度较慢,但​​语法很好。

创建基表:

import string
import pandas as pd

l = list(string.ascii_lowercase)
df_base = (pd.DataFrame(index=l, columns=l).fillna(0)
.rename_axis('Start', axis=0)
.rename_axis('End', axis=1))

代码:

df = df.assign(Start=df[0].str[0], End=df[0].str[-1])
to_add = pd.crosstab(df.Start, df.End)
#to_add = df.pivot_table(index='Start', columns='End', aggfunc='size')
#to_add = df.groupby(['Start', 'End']).size().unstack(-1)

#End e n t
#Start
#a 3 1 1

df_base = df_base.add(to_add, fill_value=0)

输出(前 5 行):

End      a    b    c    d    e    f  ...    x    y    z  
Start
a 0.0 0.0 0.0 0.0 3.0 0.0 ... 0.0 0.0 0.0
b 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0
c 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0
d 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0
e 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0
<小时/>

尽管在这种情况下不需要df_base,您可以reindex两次:

(to_add.reindex(list(string.ascii_lowercase), axis=1)
.reindex(list(string.ascii_lowercase), axis=0)
.fillna(0))

关于python - 如何计算一个数据帧中的字符值并将其添加到另一个现有数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55269099/

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