【问题标题】:get the count of columns contains a string in pandas获取包含熊猫中的字符串的列数
【发布时间】:2017-12-06 14:42:39
【问题描述】:

我有两个数据框 df1 和 df2。

df1:

PartNumber
0000D3447E
0000D3447E
0000D3447E12
0000D3447E
0000D3447E
0000D3447E
0000D3447E2345
0000F2892E
0000F2892E
0000F2892E
0000F2892E34
0000F2892E
0000F2892E
0000F2892E12

df2:

PartNumber
0000D3447E39S
0000D3447E39S
0000D3447E39S
0000D3447E39S
0000D3447E39S
0000D3447E39S
0000D3447E39S2245
0000F2892EDI1
0000F2892EDI1
0000F2892EDI1
0000F2892EDI124
0000F2892EDI1
0000F2892EDI1
0000F2892EDI1
0000D1617EAD6
0000D1617EAD6
0000D1617EAD6137
0000D1617EAD6
0000D1617EAD6
0000D1617EAD612
0000D1617EAD6
0000D3447EYG1
0000D3447EYG1
0000D3447EYG1
0000D3447EYG1
0000D3447EYG1
0000D3447EYG1
0000D3447EYG1

我需要从 df1 获取 '0000D3447E' 并获取包含此字符串的 df2 的列计数,并通过创建一个新列来更新 df1 中的计数。

给定答案 df1['count_of_colors'] = df1['PartNumber'].map(df2['PartNumber'].str[:10].value_counts())
可能会解决问题,但字符串不是恒定的 10 个字符。所以,我得到错误的字符串计数,因为字符串被限制为 str[:10] 个字符。

谢谢。

【问题讨论】:

  • 考虑接受正确解决您问题的答案。如果两者都没有,请添加预期输出。我个人对您提供的样本数据计数为零的事实感到困惑。请考虑在添加预期输出之前更新问题中的数据。

标签: python python-3.x pandas numpy


【解决方案1】:

你可以使用地图

df1['count_of_colors'] = df1['PartNumber'].map(df2['PartNumber'].str[:10].value_counts())

df1:

    PartNumber  count_of_colors
0   0000D3447E  14
1   0000D3447E  14
2   0000D3447E  14
3   0000D3447E  14
4   0000D3447E  14
5   0000D3447E  14
6   0000D3447E  14
7   0000F2892E  7
8   0000F2892E  7
9   0000F2892E  7
10  0000F2892E  7
11  0000F2892E  7
12  0000F2892E  7
13  0000F2892E  7

编辑:使用 str.extract 提取 df2 中的完全匹配,然后使用相同的解决方案

pat = '({})'.format('|'.join(df1['PartNumber'].unique()))

df2['PartMatch'] = df2['PartNumber'].str.extract(pat, expand = False)

df1['count_of_colors'] = df1['PartNumber'].map(df2['PartMatch'].value_counts())

你得到相同的输出,并且它没有硬编码字符数

【讨论】:

  • 在答案中,字符串长度限制为“str[:10]”。你能告诉我如何从df1中取出整个字符串吗?比如 df1['count_of_colors'] = df1['PartNumber'].map(df2['PartNumber'].str[:len(df2['PartNumber'].str)].value_counts())
  • 我试过这个。但它没有给我任何计数。
  • 我没有收到任何错误。脚本通过了,但我没有在数据框中看到任何更新的计数。
  • 它与您发布的示例 df 一起使用。如果问题不可重现,则难以排除故障
  • 谢谢 Vaishali。它现在正在工作。我犯了一个错误,这就是为什么它没有早点工作。
【解决方案2】:

我想你只需要这个

df1['count_of_colors'] =df1['PartNumber'].map(df2['PartNumber'].value_counts())

【讨论】:

  • 我试过这个。但它也没有给我任何计数
【解决方案3】:

我的代码在这里。它对我有用.. 我无法复制你提供的所有数据,但这里有一个示例

import pandas as pd
df1= pd.DataFrame(["0000D3447E","0000F2892E"])
df1.columns=['data']
df2=pd.DataFrame(["0000D3447E","0000D3447E","0000D3447E","0000D3447E","0000F2892E"])
df2.columns=['data']

df1['count']= df1['data'].map(df2['data'].value_counts())

df1

【讨论】:

  • 对我来说,当我使用此代码时,'count' 列是空的
  • 谢谢 emdi。感谢您的帮助。
猜你喜欢
  • 2018-08-08
  • 2019-03-04
  • 2021-07-16
  • 2021-06-03
  • 2019-07-12
  • 2017-05-02
  • 1970-01-01
  • 2017-09-24
  • 2019-03-27
相关资源
最近更新 更多