从多列python中查找

从多列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

我有以下数据帧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           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))