从多列python中查找
我有以下数据帧df:从多列python中查找,python,pandas,dataframe,sum,lookup,Python,Pandas,Dataframe,Sum,Lookup,我有以下数据帧df: ID 03/01/2021 17/01/2021 20/02/2021 03/07/2022 17/07/2022 0 ABC 5 6 10 5 5 1 BCD 6 7 3 6
ID 03/01/2021 17/01/2021 20/02/2021 03/07/2022 17/07/2022
0 ABC 5 6 10 5 5
1 BCD 6 7 3 6 10
2 DEF 10 4 5 2 8
我想查找具有相同月份和年份的列,并将值的总和保存在新的数据框中
产出将是:
date sum
01/2021 38
02/2021 18
07/2022 36
02/2023 19
我非常感谢你的帮助 试试这个:
# df = your original dataframe
mth_year_sums = dict()
for date, col in df.iteritems():
mth_year = date.split("/", maxsplit=1)[-1]
count = mth_year_sums.get(mth_year, 0)
mth_year_sums[mth_year] = count + sum(col)
result = pd.DataFrame({'sum': mth_year_sums})
# rename index name to 'date'
result.index.name = 'date'
print(result)
与和一起使用:
尝试转换数据帧,然后按
年
和月
分组
df = df.drop('ID', axis=1).T
df.index = pd.to_datetime(df.index, format='%d/%m/%Y')
df2 = df.groupby([df.index.year, df.index.month]).sum(1).sum(1)
df2.index = [ f"{m}/{y}" for (y,m) in df2.index ]
df2 = pd.DataFrame({'Date': df2.index, 'sum': df2.values})
df2:
Date sum
1/2021 38
2/2021 18
7/2022 36
2/2023 19
或
首先对日期列值求和,然后按groupby计算和
df1 = df.drop('ID', axis=1).sum(0)
df1.index = pd.to_datetime(df1.index, format='%d/%m/%Y')
df2 = df1.groupby([df1.index.year, df1.index.month]).sum(1)
df2.index = [ f"{m}/{y}" for (y,m) in df2.index ]
df2 = pd.DataFrame(df2, columns=['sum']).rename_axis('Date')
我粘贴
ID 03/01/2021 17/01/2021 20/02/2021 03/07/2022 17/07/2022 20/02/2023
ABC 5 6 10 5 5 6
BCD 6 7 3 6 10 4
DEF 10 4 5 2 8 9
放入文件中的一些文件。然后,这个小程序将为您提供所需的输出:
import pandas as pd
df = pd.read_csv('some_df.in',sep='\s+')
my = dict()
for d in df.columns[1:]:
day,mo,yr=d.split('/')
key=mo+'/'+yr
if key in my:
my[key].append(d)
else:
my[key]=[d]
print('date sum')
for moyr,col in my.items():
tot=0
for c in col:
tot+=sum(df[d].to_list())
print('{:s} {:d}'.format(moyr,tot))
谢谢你的回复,但是当我执行代码时,我得到了这个错误:keyrerror:“['ID']在axis中找不到”,我不太理解这个问题,我想是因为我没有提到我有索引!我如何解决这个问题?@FaziaChenna您可以直接使用df.T
谢谢您的回复,但是当我执行代码时,我遇到了以下错误:ValueError:时间数据“0”与格式“%d/%m/%Y”不匹配(匹配)
import pandas as pd
df = pd.read_csv('some_df.in',sep='\s+')
my = dict()
for d in df.columns[1:]:
day,mo,yr=d.split('/')
key=mo+'/'+yr
if key in my:
my[key].append(d)
else:
my[key]=[d]
print('date sum')
for moyr,col in my.items():
tot=0
for c in col:
tot+=sum(df[d].to_list())
print('{:s} {:d}'.format(moyr,tot))