মোট পান্ডাস কলাম পান


107

লক্ষ্য

আমার কাছে একাধিক কলাম সহ নীচে দেখানো একটি পান্ডাস ডেটা ফ্রেম রয়েছে এবং মোট কলামটি পেতে চাই MyColumn


ডেটা ফ্রেম -df:

print df

           X           MyColumn  Y              Z   
0          A           84        13.0           69.0   
1          B           76         77.0          127.0   
2          C           28         69.0           16.0   
3          D           28         28.0           31.0   
4          E           19         20.0           85.0   
5          F           84        193.0           70.0   

আমার প্রচেষ্টা :

আমি কলাম ব্যবহার করে এর সমষ্টি পেতে চেষ্টা করেছেন groupbyএবং .sum():

Total = df.groupby['MyColumn'].sum()

print Total

এটি নিম্নলিখিত ত্রুটির কারণ:

TypeError: 'instancemethod' object has no attribute '__getitem__'

প্রত্যাশিত আউটপুট

আমি আউটপুট নিম্নলিখিত হিসাবে হবে আশা করতাম:

319

অথবা বিকল্পভাবে, আমি মোট dfএকটি নতুন rowএনটাইটেল সহ সম্পাদনা করতে চাই TOTAL:

           X           MyColumn  Y              Z   
0          A           84        13.0           69.0   
1          B           76         77.0          127.0   
2          C           28         69.0           16.0   
3          D           28         28.0           31.0   
4          E           19         20.0           85.0   
5          F           84        193.0           70.0   
TOTAL                  319

11
পান্ডাস কেন পাইথোনিক নয় তার উদাহরণের জন্য, কীভাবে কেবল একটি কলামের যোগফল করতে হবে তা নিয়ে বিভ্রান্তির চেয়ে আরও কিছু দেখার দরকার নেই।
ব্যবহারকারী 1416227

উত্তর:


214

আপনার ব্যবহার করা উচিত sum:

Total = df['MyColumn'].sum()
print (Total)
319

তারপর আপনি ব্যবহার locসঙ্গে Seriesযে ক্ষেত্রে সূচক নির্দিষ্ট কলাম হিসাবে একই হিসাবে নির্ধারণ করা উচিত, আপনি সমষ্টি করা প্রয়োজন:

df.loc['Total'] = pd.Series(df['MyColumn'].sum(), index = ['MyColumn'])
print (df)
         X  MyColumn      Y      Z
0        A      84.0   13.0   69.0
1        B      76.0   77.0  127.0
2        C      28.0   69.0   16.0
3        D      28.0   28.0   31.0
4        E      19.0   20.0   85.0
5        F      84.0  193.0   70.0
Total  NaN     319.0    NaN    NaN

কারণ আপনি যদি স্কেলারটি পাস করেন তবে সমস্ত সারিগুলির মান পূরণ করা হবে:

df.loc['Total'] = df['MyColumn'].sum()
print (df)
         X  MyColumn      Y      Z
0        A        84   13.0   69.0
1        B        76   77.0  127.0
2        C        28   69.0   16.0
3        D        28   28.0   31.0
4        E        19   20.0   85.0
5        F        84  193.0   70.0
Total  319       319  319.0  319.0

আরও দুটি সমাধান রয়েছে atএবং ixনীচের অ্যাপ্লিকেশনগুলি দেখুন:

df.at['Total', 'MyColumn'] = df['MyColumn'].sum()
print (df)
         X  MyColumn      Y      Z
0        A      84.0   13.0   69.0
1        B      76.0   77.0  127.0
2        C      28.0   69.0   16.0
3        D      28.0   28.0   31.0
4        E      19.0   20.0   85.0
5        F      84.0  193.0   70.0
Total  NaN     319.0    NaN    NaN

df.ix['Total', 'MyColumn'] = df['MyColumn'].sum()
print (df)
         X  MyColumn      Y      Z
0        A      84.0   13.0   69.0
1        B      76.0   77.0  127.0
2        C      28.0   69.0   16.0
3        D      28.0   28.0   31.0
4        E      19.0   20.0   85.0
5        F      84.0  193.0   70.0
Total  NaN     319.0    NaN    NaN

দ্রষ্টব্য: পান্ডাস v0.20 যেহেতু, ixঅবচিত করা হয়েছে। ব্যবহার করুন locঅথবা ilocপরিবর্তে।


এটি দুর্দান্ত :) ব্যাখ্যাটির জন্য ধন্যবাদ, আমি কি জিজ্ঞাসা করতে পারি .locউপরের উদাহরণে কী করে?
LearningToJava


atপ্রসারিতকরণের সাথেও সেট করার জন্য কাজ করে, শেষ সম্পাদনা দেখুন।
jezrael

ধন্যবাদ, কোন পছন্দসই পদ্ধতি আছে?
LearningToJava

1
হুম, দস্তাবেজ বলছেন The .loc/.ix/[] operations can perform enlargement when setting a non-existant key for that axis., তাই locবা ixবা []। পরের অংশে লিখেছে at may enlarge the object in-place as above if the indexer is missing.তাই সমস্ত পদ্ধতি ভাল, তবে atআমি মনে করি দ্রুত test
জিজরেল

22

আপনি এখানে যেতে পারেন অন্য বিকল্প:

df.loc["Total", "MyColumn"] = df.MyColumn.sum()

#         X  MyColumn      Y       Z
#0        A     84.0    13.0    69.0
#1        B     76.0    77.0   127.0
#2        C     28.0    69.0    16.0
#3        D     28.0    28.0    31.0
#4        E     19.0    20.0    85.0
#5        F     84.0   193.0    70.0
#Total  NaN    319.0     NaN     NaN

আপনি append()পদ্ধতিটিও ব্যবহার করতে পারেন :

df.append(pd.DataFrame(df.MyColumn.sum(), index = ["Total"], columns=["MyColumn"]))

এখানে চিত্র বর্ণনা লিখুন


হালনাগাদ:

আপনার যদি সমস্ত সংখ্যক কলামের জন্য যোগফলের প্রয়োজন হয় , আপনি নিম্নলিখিতগুলির একটি করতে পারেন:

appendকার্যক্ষম পদ্ধতিতে এটি করতে ব্যবহার করুন (মূল ডেটা ফ্রেমটি পরিবর্তন করবেন না):

# select numeric columns and calculate the sums
sums = df.select_dtypes(pd.np.number).sum().rename('total')

# append sums to the data frame
df.append(sums)
#         X  MyColumn      Y      Z
#0        A      84.0   13.0   69.0
#1        B      76.0   77.0  127.0
#2        C      28.0   69.0   16.0
#3        D      28.0   28.0   31.0
#4        E      19.0   20.0   85.0
#5        F      84.0  193.0   70.0
#total  NaN     319.0  400.0  398.0

locজায়গায় ডেটা ফ্রেম পরিবর্তন করতে ব্যবহার করুন :

df.loc['total'] = df.select_dtypes(pd.np.number).sum()
df
#         X  MyColumn      Y      Z
#0        A      84.0   13.0   69.0
#1        B      76.0   77.0  127.0
#2        C      28.0   69.0   16.0
#3        D      28.0   28.0   31.0
#4        E      19.0   20.0   85.0
#5        F      84.0  193.0   70.0
#total  NaN     638.0  800.0  796.0

সমস্ত কলামের যোগফল কেমন?
ফ্যাকফি

9

ডেটাফ্রেমের দৈর্ঘ্য পাওয়ার অনুরূপ, নীচে পান্ডাস len(df)এবং জ্বলজ্বলে কাজ করেছে:

Total = sum(df['MyColumn'])

বা বিকল্পভাবে

Total = sum(df.MyColumn)
print Total

2

কলামের যোগফলের দুটি উপায় রয়েছে

ডেটাসেট = পিডি.ড্রেড_সিএসভি ("ডেটা.সিএসভি")

1: যোগফল (ডেটাসেট.কলাম_নাম)

2: ডেটাসেট ['কলাম_নাম']। যোগফল ()

এতে যদি কোনও সমস্যা থাকে তবে দয়া করে আমাকে সংশোধন করুন ..


1

অন্যান্য বিকল্প হিসাবে, আপনি নীচের মতো কিছু করতে পারেন

Group   Valuation   amount
    0   BKB Tube    156
    1   BKB Tube    143
    2   BKB Tube    67
    3   BAC Tube    176
    4   BAC Tube    39
    5   JDK Tube    75
    6   JDK Tube    35
    7   JDK Tube    155
    8   ETH Tube    38
    9   ETH Tube    56

স্ক্রিপ্টের নীচে, আপনি উপরের ডেটা ব্যবহার করতে পারেন

import pandas as pd    
data = pd.read_csv("daata1.csv")
bytreatment = data.groupby('Group')
bytreatment['amount'].sum()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.