Pandas Groupby比较Excel中带有子行的2列中的计数相等值

易山

我有一个像这样的Excel文件:

在此处输入图片说明

链接

.----.-------------.-------------------------.-----------------.
|    |     ID      | Shareholder - Last name |   DM Cognome    |
:----+-------------+-------------------------+-----------------:
| 1. | 01287560153 | MASSIRONI               | Bocapine Ardaya |
:----+-------------+-------------------------+-----------------:
|    |             | CAGNACCI                |                 |
:----+-------------+-------------------------+-----------------:
| 2. | 05562881002 |                         | Directors       |
:----+-------------+-------------------------+-----------------:
| 3. | 04113870655 | SABATO                  | Sabato          |
:----+-------------+-------------------------+-----------------:
|    |             | VILLARI                 |                 |
:----+-------------+-------------------------+-----------------:
| 4. | 01419190846 | SALMERI                 | Salmeri         |
:----+-------------+-------------------------+-----------------:
|    |             | MICALIZZI               | Lipari          |
:----+-------------+-------------------------+-----------------:
|    |             | LIPARI                  |                 |
'----'-------------'-------------------------'-----------------'

ffill由于存在子行因此我使用pandas和ID列打开了此文件然后groupby通过ID获取Shareholder - Last nameDM\nCognome上任何相等值的计数但是我不能。在这种情况下,结果应为0 row1 0 row2 1 row3 2 row4

应该注意的是,第4行由3个子行组成,第3行也由2个子行组成。

我有两个问题:

  1. 读取如上所述的无组织excel文件并进行大量比较,替换值等的最佳方法是什么?
  2. 如何获得我前面提到的结果。

这是我所做的,但是不起作用:

data['ID'] = data['ID'].fillna(method='ffill')
data.groupby('ID', sort=False, as_index=False)['Shareholder - Last name', 'DM\nCognome'].apply(lambda x: (x['Shareholder - Last name']==x['DM\nCognome']).count())
戴维·布雷克斯

首先,读取表作为输入(将ID保留为字符串而不是float):

df = pd.read_excel("Workbook1.xlsx", converters={'ID':str})
df = df.drop("Unnamed: 0", axis=1) #drop this column since it is not useful

填写ID,如果缺少股东,请用“ Missing”替换Nan:

df['ID'] = df['ID'].fillna(method='ffill')
df["Shareholder - Last name"] = df["Shareholder - Last name"].fillna("missing")

将姓转换为小写:

df["Shareholder - Last name"] = df["Shareholder - Last name"].str.lower()

自定义函数,用于计算另一列中出现的住户数量:

def f(group):
    s = pd.Series(group["DM\nCognome"].str.lower())
    count = 0
    for surname in group["Shareholder - Last name"]:
        count += s.str.count(surname).sum()
    return count

最后获得每个ID的计数:

df.groupby("ID",sort=False)[["Shareholder - Last name", "DM\nCognome"]].apply(lambda x: f(x))

输出:

ID
01287560153    0.0
05562881002    0.0
04113870655    1.0
01419190846    2.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

列表Java中的相等值

在laravel查询构建器中选择具有2列相等值的行

Groupby Pandas中的条件计数

结果中的“ Pandas Groupby”列

如果两列相等,则遍历Pandas中的行并应用函数

列中的相等值

SQL查询选择具有2列相等值的行

在不同的字段中查找具有相等值的记录?

如何选择列中具有相等值的线并保持此特性

熊猫-在迭代中使用具有相等值的行中的值

Pandas groupby / pivot表用于对2列中的值进行计数

mySQL:如何过滤其他表中没有相等值的列?

获取带有预定义列表的pandas列字符串中匹配单词的计数

带有多级列的Pandas Groupby

在窗口函数中对具有相等值的行进行计数

如何按Excel或GSheet中第二列的值对第一列中具有相等值的列表进行排序?

如何删除在Matlab的指定列中矩阵A与矩阵B具有相等值的那些行?

计算两个指定列中具有相等值的行数

比较Pandas中的两个Excel文件,并在两个列中返回具有相同值的行

比较 Pandas 中 groupby 对象中的列

Pandas 中 groupby 列的 timedeltas

根据不同数据框中的相等值选择行

如何选择列中具有相等值的行

从具有相等值的几个数据框中删除行

比较组并获得所有组的相等值(pandas groupby)

Pandas Dataframe 根据具有相等值的两列删除行

pandas - 查找一行中相等值的批次之間的索引距離

统一熊猫不同列中的相等值?

选择列具有相等值的行的分区