Рассмотрим следующую модификацию вашего кода.Четыре print
позволяют вам проверить данные визуально (в табличной форме), что может помочь вам, я считаю.
import pandas as pd
# dictionary of sets
data = {
'June':
{'aa', 1, 3, 2, 12, 3, 4, 5, 'bb', 6, 7, 8, 9, 100, 65, 56, 'cc', 70},
'May':
{'aa', 11, 12, 3, 4, 5, 123, 12, 14, 8, 'cc', 100, 56},
'April':
{'aa', 12, 111, 33, 13, 5, 6, 4, 555, 'bb', 3333, 65, 634, 7, 8, 8888, 100},
'March':
{'aa', 44, 33, 5, 6, 7, 8, 999, 'bb', 4, 2, 66, 3, 70, 1, 1, 2}}
# print(*(f'{key:>5}: {val}' for key, val in data.items()), sep='\n')
# dictionary with months only
months = {month: 0 for month in data}
# transform dictionary of sets into dictionary of dictionaries
new_data = dict()
for month in data:
for value in data[month]:
new_data.setdefault(str(value), months.copy())[month] = 1
# print(*(f'{key:>5}: {val}' for key, val in new_data.items()), sep='\n')
# create dataframe
df = pd.DataFrame.from_dict(new_data, orient='index')
df.index.name = 'RPN'
# print(df)
def compare(srs):
if srs.sum() == len(months):
return 'All months'
else:
return ', '.join(month
for month, check
in zip(srs.index, srs)
if check)
# add aging string
df['Aging'] = df.apply(compare, axis=1)
# print(df)
РЕДАКТИРОВАТЬ
Предположим, ваши данныезагружается из файлов с пандами в виде фреймов данных, тогда вы можете создать data
следующим образом:
# kinda loaded data
a = pd.DataFrame({'RPN': ['aa', 1, 3, 2, 12, 3, 4, 5, 'bb', 6, 7, 8, 9, 100, 65, 56, 'cc', 70]})
b = pd.DataFrame({'RPN': ['aa', 11, 12, 3, 4, 5, 123, 12, 14, 8, 'cc', 100, 56]})
c = pd.DataFrame({'RPN': ['aa', 12, 111, 33, 13, 5, 6, 4, 555, 'bb', 3333, 65, 634, 7, 8, 8888, 100]})
d = pd.DataFrame({'RPN': ['aa', 44, 33, 5, 6, 7, 8, 999, 'bb', 4, 2, 66, 3, 70, 1, 1, 2]})
# dictionary of sets
data = {'June': a['RPN'], 'May': b['RPN'],
'April': c['RPN'], 'March': d['RPN']}