首页 > 编程问答 >如何计算列表列行之间的公共元素

如何计算列表列行之间的公共元素

时间:2024-07-21 03:48:09浏览次数:7  
标签:python pandas dataframe list

是否可以计算方法链中的一行和前一行之间的列表列中的公共项的数量? 我下面的代码抛出错误 'TypeError: unhashable type: 'list''

import pandas as pd

df = pd.DataFrame({
    'x':[1,2,3,4],
    'list_column': [
        ['apple', 'banana', 'cherry'],
        ['banana', 'cherry'],
        ['cherry', 'date', 'fig'],
        ['orange']
    ]
})

res = len(set(df.loc[1,'list_column']) & set(df.loc[0,'list_column']))
res

df=(df
     .assign(
         list_length=lambda x: x['list_column'].str.len(),
         nr_common=lambda x: (set(x['list_column']) & set(x['list_column'].shift(1))).len() 
         )
)

df

遇到的错误是由于尝试在整个 Series 对象( x['list_column'] )上使用 set 运算,而不是列表列中的各个列表元素上使用。

可以使用 apply 函数对 DataFrame 的每一行应用一个函数来解决这个问题,该函数计算当前行和前一行之间列表的公共元素数量。

以下是修改后的代码:

import pandas as pd

df = pd.DataFrame({
    'x':[1,2,3,4],
    'list_column': [
        ['apple', 'banana', 'cherry'],
        ['banana', 'cherry'],
        ['cherry', 'date', 'fig'],
        ['orange']
    ]
})

def count_common_elements(row):
    if row.name == 0:
        return 0
    else:
        prev_row = df['list_column'].iloc[row.name - 1]
        return len(set(row['list_column']) & set(prev_row))

df['nr_common'] = df.apply(count_common_elements, axis=1)
print(df)

代码解释:

  1. count_common_elements(row) 函数:
  2. 接受 DataFrame 的一行作为输入。
  3. 如果是第一行 ( row.name == 0 ),则返回 0,因为没有前一行可以比较。
  4. 否则,获取前一行的 list_column 值。
  5. 使用 set 运算计算当前行和前一行列表中的公共元素数量,并返回该数量。

  6. df.apply(count_common_elements, axis=1)

  7. count_common_elements 函数应用于 DataFrame 的每一行 ( axis=1 )。
  8. 将结果存储在一个名为 nr_common 的新列中。

现在, df DataFrame 将包含一个名为 nr_common 的新列,其中包含列表列中每对连续行之间的公共元素数量。

标签:python,pandas,dataframe,list
From: 78400455

相关文章

  • python 舰队容器
    我正在尝试使用容器在flet中制作一个菜单,它应该是半透明的,但其中的项目不是。我尝试将opacity=1分配给元素,但没有成功-它们与容器一样透明感谢任何帮助我的代码:nickname=ft.TextField(label="xxx",hint_text="xxx")column=ft.Column(controls=[nickname......
  • Python应用程序跨子包共享的配置文件
    我正在构建一个应用程序来控制一些硬件。我在包中实现了不同类型的硬件:电机和测量设备。我的文件结构如下:name_of_my_app/__init__.pymain.pyconfig.iniCONFIG.pymotors/__init__.pyone_kind_of_motor.pymeasurement_devices/......
  • python中时间序列数据的梯度计算
    我正在尝试编写一个函数,它可以从最适合下面的线返回梯度dataframe在浏览了谷歌的几个资源之后,我仍然不确定这是如何完成的。我明白最佳拟合线的计算公式为:y=mx+b将因变量(y)设置为foos,将自变量(x)设置为DateTimeDatafram......
  • 调试用 C 编写的 Python 扩展
    我非常熟悉编写C代码,并且很擅长编写Python代码。我正在尝试学习如何用C编写可以从OSX10.15.7上的Python-3.9.X调用的模块。我已经得到了几个“helloworld”类型的示例,但是对于复杂的示例,我正在努力弄清楚如何调试我编写的C扩展。MWE:src/add.c//......
  • 具有块大小选项的 Python pandas read_sas 因索引不匹配而失败并出现值错误
    我有一个非常大的SAS文件,无法容纳在我的服务器内存中。我只需要转换为镶木地板格式的文件。为此,我使用pandas中chunksize方法的read_sas选项分块读取它。它主要是在工作/做它的工作。除此之外,一段时间后它会失败并出现以下错误。此特定SAS文件有794......
  • 使用 requests 包 python 时打开文件太多
    我正在使用Pythonrequests包向API发出大量请求。然而,在某些时候,我的程序由于“打开的文件太多”而崩溃。当我明确关闭我的会话时,我真的不知道这是怎么回事。我使用以下代码:importrequestsimportmultiprocessingimportnumpyasnps=requests.session()s.keep......
  • Python 是一种选择性解释语言吗?为什么下面的代码不起作用?
    由于程序是从上到下运行的,为什么下面的代码不执行块中的第一行就直接抛出错误?if5>2:print("TwoislessthanFive!")print("Fiveisgreaterthantwo!")错误:文件“/Users/____/Desktop/Pythonpractise/practise.py”,第3行print("五比二大!")Indentati......
  • Pandas 哈希表给出 key error:0 和 get_item
    我试图获取两个pandas数据表的相同元素,对数据进行索引并将其合并。我将它用于大量数据(数百万)。第一个表(df)是恒定的,第二个表(d2)在每个循环中都在变化,新元素将与第一个表合并。这是我的此过程的代码:df=pd.read_csv("inputfile.csv",header=None)d1=pd.DataFram......
  • 裁剪时间变量 Python Matplotlib Xarray
    我不确定这是否是一个愚蠢的问题,但我想按时间变量剪辑.nc文件。我在xarray中打开了数据集,但以下ds.sel行(之前已运行)仅返回错误。ds=xr.open_dataset('/Users/mia/Desktop/RMP/data/tracking/mcs_tracks_2015_11.nc')selected_days=ds.sel(time=slice('2015-11-22',......
  • 用于匹配两个数据列表中的项目的高效数据结构 - python
    我有两个列表,其中一个列表填充ID,另一个列表填充进程名称。多个进程名称可以共享一个ID。我希望能够创建一个可以使用特定ID的数据结构,然后返回与该ID关联的进程列表。我还希望能够使用特定的进程名称并返回与其连接的ID列表。我知道我可以为此创建一个字典,但是I......