[英]Pandas: Iterate over rows and give values an unique number
你好,Stackoverflow 的親愛的人們。 我很想就一個讓我有點頭疼的問題獲得一些指導。 這就是我尋求幫助的部分,因為我的新手知識並不能幫助我解決這個問題。
簡而言之:我有一組大量數據,我想知道如何給這些值一個唯一的數字來識別它們。 但不是幾次,而是一次。
我們有什么和想要什么:
輸入:
d = {
'A': ['Rack Ants', 'EB Animals', 'IN Penguin', 'IN Penguin', 'IN Hippo', 'T-IPS-ACK', 'AA-BMUL', 'VB-SEM-012', 'VE-PAG'],
'B': ['EB Animals', 'Applications', 'EB Animals', 'EB Animals', 'EB Humans', 'Applications', 'IN Penguin', 'IN Hippo', 'IN Crocodile']
}
df = pd.DataFrame(data=d)
df
我想要的(輸出) :
我的想法(我未能實現) :
我希望這篇文章不會變得太長。 我很高興能在這里得到每一次幫助。
這將為您提供您想要的 DataFrame。 在大多數情況下,您都知道解決此問題需要做些什么:
import pandas as pd
def buld_key_df(values:list, number:int) -> pd.DataFrame:
return pd.DataFrame({
f'name ({number}s)' : values,
f'code ({number}s)' : [number + i for i in range(len(values))],
})
df = pd.DataFrame({
'A': [
'Rack Ants', 'EB Animals', 'IN Penguin',
'IN Penguin', 'IN Hippo', 'T-IPS-ACK',
'AA-BMUL', 'VB-SEM-012', 'VE-PAG'
],
'B': [
'EB Animals', 'Applications', 'EB Animals',
'EB Animals', 'EB Humans', 'Applications',
'IN Penguin', 'IN Hippo', 'IN Crocodile'
],
})
unique = pd.concat([df['A'],df['B']]).unique()
df_300 = [x for x in unique if x.startswith('EB ')]
df_400 = [x for x in unique if x.startswith('IN ')]
df_500 = [x for x in unique if x not in df_300 + df_400]
df_300 = buld_key_df(df_300, 300)
df_400 = buld_key_df(df_400, 400)
df_500 = buld_key_df(df_500, 500)
df = pd.concat([df, df_300, df_400, df_500], axis=1).fillna('')
pd.set_option('display.max_columns', 8)
print(df)
編輯:將df_300
、 df_400
和df_500
的三個列表組合替換為for
循環可能更理想,如下所示。 只有當您有大量的唯一值要分配代碼時,這種速度提升才會很明顯,如果是這種情況,您可能希望代碼為數萬而不是數百:
import pandas as pd
def buld_key_df(values:list, number:int) -> pd.DataFrame:
return pd.DataFrame({
f'name ({number}s)' : values,
f'code ({number}s)' : [number + i for i in range(len(values))],
})
df = pd.DataFrame({
'A': [
'Rack Ants', 'EB Animals', 'IN Penguin',
'IN Penguin', 'IN Hippo', 'T-IPS-ACK',
'AA-BMUL', 'VB-SEM-012', 'VE-PAG'
],
'B': [
'EB Animals', 'Applications', 'EB Animals',
'EB Animals', 'EB Humans', 'Applications',
'IN Penguin', 'IN Hippo', 'IN Crocodile'
],
})
unique = pd.concat([df['A'],df['B']]).unique()
df_30k, df_40k, df_50k = [], [], []
for x in unique:
if x.startswith('EB '):
df_30k.append(x)
elif x.startswith('IN '):
df_40k.append(x)
else:
df_50k.append(x)
df_30k = buld_key_df(df_30k, 30000)
df_40k = buld_key_df(df_40k, 40000)
df_50k = buld_key_df(df_50k, 50000)
df = pd.concat([df, df_30k, df_40k, df_50k], axis=1).fillna('')
pd.set_option('display.max_columns', 8)
print(df)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.