私は2つのスプレッドシートを使用して 'Change Data Capture'をしようとしています。 結果のデータフレームをグループ化して、奇妙な問題が発生しました。 要件:グループ== 2のパンダ:groupbyサイズ()の決定を
ケース1)サイズ、グループ== 1の行う特定のタスク
ケース2)大きさ、特定のタスクを実行
ケース3)size_of_a_group> 2、
:私のような何かをしたいと思いますそれを介して
問題はありません、私はそのサイズごとにGROUPBYの結果を打破することはできませんしようとどのように関係して、ループで特定のタスクを実行します
if(group_by_1.filter(lambda x : len(x) ==2):
for grp,rows in sub(??)group:
for j in range(len(rows)-1):
#check rows[j,'column1'] != rows[j+1,'column1']:
do something
ここは私のコードスニペットです。どんな助けも大歓迎です。
import pandas as pd
import numpy as np
pd.set_option('display.height', 1000)
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
print("reading wolverine xlxs")
# defining metadata
df_header = ['DisplayName','StoreLanguage','Territory','WorkType','EntryType','TitleInternalAlias',
'TitleDisplayUnlimited','LocalizationType','LicenseType','LicenseRightsDescription',
'FormatProfile','Start','End','PriceType','PriceValue','SRP','Description',
'OtherTerms','OtherInstructions','ContentID','ProductID','EncodeID','AvailID',
'Metadata', 'AltID', 'SuppressionLiftDate','SpecialPreOrderFulfillDate','ReleaseYear','ReleaseHistoryOriginal','ReleaseHistoryPhysicalHV',
'ExceptionFlag','RatingSystem','RatingValue','RatingReason','RentalDuration','WatchDuration','CaptionIncluded','CaptionExemption','Any','ContractID',
'ServiceProvider','TotalRunTime','HoldbackLanguage','HoldbackExclusionLanguage']
df_w01 = pd.read_excel("wolverine_1.xlsx", names = df_header)
df_w02 = pd.read_excel("wolverine_2.xlsx", names = df_header)
df_w01['version'] = 'OLD'
df_w02['version'] = 'NEW'
#print(df_w01)
df_m_d = pd.concat([df_w01, df_w02], ignore_index = True).reset_index()
#print(df_m_d)
first_pass_get_duplicates = df_m_d[df_m_d.duplicated(['StoreLanguage','Territory','TitleInternalAlias','LocalizationType','LicenseType',
'LicenseRightsDescription','FormatProfile','Start','End','PriceType','PriceValue','ContentID','ProductID',
'AltID','ReleaseHistoryPhysicalHV','RatingSystem','RatingValue','CaptionIncluded'], keep='first')] # This datframe has records which are DUPES on NEW and OLD
#print(first_pass_get_duplicates)
first_pass_drop_duplicate = df_m_d.drop_duplicates(['StoreLanguage','Territory','TitleInternalAlias','LocalizationType','LicenseType',
'LicenseRightsDescription','FormatProfile','Start','End','PriceType','PriceValue','ContentID','ProductID',
'AltID','ReleaseHistoryPhysicalHV','RatingSystem','RatingValue','CaptionIncluded'], keep=False) # This datframe has records which are unique on desired values evn for first time
#print(first_pass_drop_duplicate)
group_by_1 = first_pass_drop_duplicate.groupby(['StoreLanguage','Territory','TitleInternalAlias','LocalizationType','LicenseType','FormatProfile'],as_index=False)
#Best Case group_by has 2 elements on big key and at least one row is 'new'
#print(group_by_1.grouper.group_info[0])
#for i,rows in group_by_1:
#if(.transform(lambda x : len(x)==2)):
#print(group_by_1.grouper.group_info[0])
#print(group_by_1.describe())
'''for i,rows in group_by_1:
temp_rows = rows.reset_index()
temp_rows.reindex(index=range(0,len(rows)))
print("group has: ", len(temp_rows))
for j in range(len(rows)-1):
print(j)
print("this iteration: ", temp_rows.loc[j,'Start'])
print("next iteration: ", temp_rows.loc[j+1,'Start'])
if(temp_rows.loc[j+1,'Start'] == temp_rows.loc[j,'Start']):
print("Match")
else:
print("no_match")
print(temp_rows.loc[j,'Start'])
print("++++-----++++")'''
どのようなヘルプも大歓迎です。
素晴らしい。私も同様のやり方でやりました。 – SanBan