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

标签 python pandas dataframe series

我需要将 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/

相关文章:

python - 整数的 astype float32 与 float64 错误

python - 如何使用 Python 定义、提取和替换现有 Powerpoint 中图表中的数据

python - pip 需求文件是否有命名约定?

python - 将列表列表构建为 csv/Excel 的列和行

scala - 如何为 Spark 数据帧编写多个 WHEN 条件?

arrays - 与不同 ID 关联的查找和求和值

python - Google wave 机器人内联回复

python - 将数据框转换为多列系列

Python 按其他列计算列值

Python Pandas : Counting keys and summing up their values in a data frame