对于列表 a 中的每个元素,如何计算它在另一个数据框中的特定列中出现的次数

For every element in a list a, how to count how many times it appear in one specific column in another dataframe

对于字典 a 中的每个元素,我需要计算 'age' 列中的元素在 pandas 中另一个数据帧的一个特定列中出现的次数 例如,我在下面有一个字典:

a={'age':[22,38,26],'no':[1,2,3]} 

我还有另一个包含几列的数据框

TableB= {'name': ['Braund', 'Cummings', 'Heikkinen', 'Allen'],
 'age': [22,38,26,35,41,22,38],
 'fare': [7.25, 71.83, 0 , 8.05,7,6.05,6], 
 'survived?': [False, True, True, False, True, False, True]}

我想知道字典a中的每个元素在表B的'age'列中出现了多少次。我期望的结果是 c={'age':[22,38,26],'count':[2,2,1]}

我试过应用功能,但它不起作用。它带有语法错误,我是 Pandas 的新手,有人可以帮忙吗?谢谢!

 def myfunction(y):
    seriesObj = TableB.apply(lambda x: True if y in list(x) else False, axis=1)
    numOfRows = len(seriesObj[seriesObj == True].index)
    return numofRows
 c['age']=a['age']
 c['count']=a['age'].apply(myfunction)

我想知道列表a中的每个元素在表B的'age'列中出现了多少次。结果应该是 c={'age':[22,38,26],'count':[2,2,1]}

pd.Series 使用 value_counts 方法,对 pd.DataFrame

使用 to_dict
(pd.Series(TableB['age'])
   .value_counts()
   .loc[a['age']]
   .rename('count')
   .rename_axis('age')
   .reset_index()
   .to_dict(orient='list'))

您可以在年龄列上使用 pandas.Series.value_counts() 并 select 您感兴趣的结果。以下解决方案还将考虑您的 'a' 列表。

a=[22,38,26,99]
TableB= {'name': ['Braund', 'Cummings', 'Heikkinen', 'Allen', 'John', 'Jane', 'Doe'],
 'age': [22,38,26,35,41,22,38],
 'fare': [7.25, 71.83, 0 , 8.05,7,6.05,6], 
 'survived?': [False, True, True, False, True, False, True]}

tableB_df = pd.DataFrame(TableB)
counts_series = tableB_df['age'].value_counts()
counts_series_intersection = counts_series.loc[counts_series.index.intersection(a)]
counts_df = pd.DataFrame({'age': counts_series.index, 'count': counts_series.values})

查看以下资源以获取更多信息:

https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#indexing-with-list-with-missing-labels-is-deprecated

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.value_counts.html

您可以只使用合并数据框来过滤掉没有出现在 a 中的值,然后只计算这些值。

import pandas as pd
a={'age':[22,38,26],'no':[1,2,3]} 

TableB= {'name': ['Braund', 'Cummings', 'Heikkinen', 'Allen', 'Jones', 'Davis', 'Smith'],
 'age': [22,38,26,35,41,22,38],
 'fare': [7.25, 71.83, 0 , 8.05,7,6.05,6], 
 'survived?': [False, True, True, False, True, False, True]}

df_a = pd.DataFrame(a)
df_tb = pd.DataFrame(TableB)
(pd.merge(df_tb, df_a, on='age')['age']
   .value_counts()
   .rename('count')
   .rename_axis('age')
   .reset_index()
   .to_dict(orient='list'))
{'age': [22, 38, 26], 'count': [2, 2, 1]}