gpt4 book ai didi

python - 将数据帧与单个值进行比较时如何获取返回的模式

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:26 24 4
gpt4 key购买 nike

我需要将 Pandas 系列数据与二维数组 (DataFrame) 进行比较,并从中返回字符串模式。假设我有一个包含行和列的板,我可以通过此列表理解生成它:

data = [[chr(x)+str(y) for x in range(65,65+4)]for y in range(1,5)]
[['A1', 'B1', 'C1', 'D1'],
['A2', 'B2', 'C2', 'D2'],
['A3', 'B3', 'C3', 'D3'],
['A4', 'B4', 'C4', 'D4']]

我可以用它创建一个 Pandas Dataframe:

df  = pd.DataFrame(data, columns=[1,2,3,4], index=["A","B","C","D"])

导致:

    1   2   3   4
A A1 B1 C1 D1
B A2 B2 C2 D2
C A3 B3 C3 D3
D A4 B4 C4 D4

我现在想将一个 Series 与这个 DataFrame 进行比较,并以字符串形式返回一个模式。

df2 = pd.Series(data=["A1","B2","B3","C4"])

当将以下系列与模板数据框进行比较时,返回的模式应按列结果:

["1000", "0110", "0001"]

最佳答案

使用pd.DataFrame.isin:

ind = df.isin(df2.values).T.astype(int).values
[''.join(map(str, a)) for a in ind[ind.any(1)]]

输出:

['1000', '0110', '0001']

解释:

第一行

  • df.isin(df2.values) 检查是否 each element in the df is contained in df2.values,即 ["A1","B2","B3","C4"]
  • Ttranspose() 返回转置数据帧,因为所需的输出似乎是列连接,而不是行连接。
  • astype(int) 返回转换为 01
  • 的 bool 值

第二行

  • ind[ind.any(1)] 返回至少一个元素为 True 的行,或者在本例中为 1。 (因为你似乎不需要 0000)
  • ''.join(map(str, a)) 从一行整数中返回连接的 str

关于python - 将数据帧与单个值进行比较时如何获取返回的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55968179/

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