我有一个非常大的数据帧,我想要操纵其中的一部分.实际上,我只有一列数据(称为‘refix_list’),其中每个单元格都包含一个用逗号分隔的数字字符串.我有一个由三部分组成的问题.我在试着

  • (1)将这些字符串连接到一个名为 ‘UPDATED_REFIX_LIST’,按列‘RECORING_SESSION_LABEL’分组 和"审判",这样我就可以

  • (2)删除字符串中的重复和空白(逐行), 然后

  • (3)对字符串中的结果元素进行计数.

到目前为止,第一步对我来说是有效的,尽管我不确定我是不是以最好的方式来做这件事--我在这里还是个新手,但我们正在努力!以下是我执行此操作的代码:

# Function to concatenate strings into a single string
def concat_strings(group):
    return ', '.join(group)

# Grouping and concatenating 'REFIX_LIST' into a single string for each group (Pandas series)
df1['UPDATED_REFIX_LIST'] = df1.groupby(['RECORDING_SESSION_LABEL', 'trial'])['REFIX_LIST'].transform(concat_strings)

第二步是我被困住的地方.我try 了很多东西(太多了,无法列出,老实说,我甚至不确定它们都应该如何工作),但我还没有成功地删除新字符串中的重复项和空白(S).*我认为我的问题的一部分是,我try 过的任何代码都在寻找删除较大字符串中的重复字符串,而不仅仅是从较大字符串中作为一个整体删除重复数字.这可能是我上面的代码以及我如何处理这一点的结果,但不确定.

第三步我还没能try ,因为我还不能让第二步开始.

以下是一些示例数据/代码和预期输出.当我阅读CSV文件时,下面的代码准确地表示了我到目前为止所拥有的内容.

import pandas as pd

# Define the data for DF1
data_df1 = {
    'RECORDING_SESSION_LABEL': [101, 101, 101, 101, 102, 102],
    'trial': [1, 1, 1, 2, 1, 2],
    'CURRENT_FIX_INDEX': [1, 2, 3, 4, 1, 2],
    'REFIX_LIST': ['', '7,8,10', '7,8', '6,4', '1,2', '1,3,4'],
    'UPDATED_REFIX_LIST': [',7,8,10,7,8', ',7,8,10,7,8', ',7,8,10,7,8', '6,4', '1,2,1,3,4', '1,2,1,3,4']
}

# Create DF1
df1 = pd.DataFrame(data_df1)

#print
print(df1)

这是我正在导入的CSV文件和上面的第一段代码之间的数据当前的样子.我需要做的是让我的数据在删除重复项和空白后看起来像这样(同样,逐行删除).(我在这里使用DF2只是为了分离,但这仍然是DF1):

# Define the data for DF2
data_df2 = {
    'RECORDING_SESSION_LABEL': [101, 101, 101, 101, 102, 102],
    'trial': [1, 1, 1, 2, 1, 2],
    'CURRENT_FIX_INDEX': [1, 2, 3, 4, 1, 2],
    'REFIX_LIST': ['', '7,8,10', '7,8', '6,4', '1,2', '1,3,4'],
    'UPDATED_REFIX_LIST': ['7,8,10', '7,8,10', '7,8,10', '6,4', '1,2,3,4', '1,2,3,4']
}

# Create DF2
df2 = pd.DataFrame(data_df2)

#print
print(df2)

最后,我需要对‘UPDATED_REFIX_LIST’列中的结果元素进行计数,并创建一个名为‘UPDATED_REFIX_COUNT’的新列.最终输出应如下所示(仍为DF1格式):

# Define the data for DF3
data_df3 = {
    'RECORDING_SESSION_LABEL': [101, 101, 101, 101, 102, 102],
    'trial': [1, 1, 1, 2, 1, 2],
    'CURRENT_FIX_INDEX': [1, 2, 3, 4, 1, 2],
    'REFIX_LIST': ['', '7,8,10', '7,8', '6,4', '1,2', '1,3,4'],
    'UPDATED_REFIX_LIST': ['7,8,10', '7,8,10', '7,8,10', '6,4', '1,2,3,4', '1,2,3,4'],
    'UPDATED_REFIX_COUNT': [3, 3, 3, 2, 4, 4]
}

# Create DF3
df3 = pd.DataFrame(data_df3)

print(df3)

任何帮助都非常感谢!!非常感谢!

推荐答案

只需更改初始函数以避免合并重复项:

import re

# Function to concatenate strings into a single string
# without duplicates
def concat_strings(group):
    return ', '.join(dict.fromkeys(x for s in group
                                   for x in re.split(', *', s)
                                   if x))

# Grouping and concatenating 'REFIX_LIST' into a single string for each group
df1['UPDATED_REFIX_LIST'] = (df1.groupby(['RECORDING_SESSION_LABEL', 'trial'])
                                 ['REFIX_LIST']
                                .transform(concat_strings)
                            )

# hack to count without splitting
# count the number of "," and add 1 if not an empty string
df1['UPDATED_REFIX_COUNT'] = (df1['UPDATED_REFIX_LIST'].str.count(',')
                              .add(df1['UPDATED_REFIX_LIST'].ne(''))
                             )

输出:

   RECORDING_SESSION_LABEL  trial  CURRENT_FIX_INDEX REFIX_LIST UPDATED_REFIX_LIST  UPDATED_REFIX_COUNT
0                      101      1                  1                      7, 8, 10                    3
1                      101      1                  2     7,8,10           7, 8, 10                    3
2                      101      1                  3        7,8           7, 8, 10                    3
3                      101      2                  4        6,4               6, 4                    2
4                      102      1                  1        1,2               1, 2                    2
5                      102      2                  2      1,3,4            1, 3, 4                    3

Python相关问答推荐

为什么我的(工作)代码(生成交互式情节)在将其放入函数中时不再工作?

Ibis中是否有一个ANY或ANY_UTE表达,可以让我比较子查询返回的一组值中的值?

如果我已经使用了time,如何要求Python在12秒后执行另一个操作.sleep

如何使用bs 4从元素中提取文本

是什么导致对Python脚本的jQuery Ajax调用引发500错误?

使用plotnine和Python构建地块

通过优化空间在Python中的饼图中添加标签

Pandas 滚动最接近的价值

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

Python中的嵌套Ruby哈希

输出中带有南的亚麻神经网络

用Python解密Java加密文件

无法使用requests或Selenium抓取一个href链接

利用Selenium和Beautiful Soup实现Web抓取JavaScript表

调用decorator返回原始函数的输出

实现神经网络代码时的TypeError

Flask Jinja2如果语句总是计算为false&

如何将数据帧中的timedelta转换为datetime

为什么我的sundaram筛这么低效

polars:有效的方法来应用函数过滤列的字符串