gpt4 book ai didi

python - 将数据框从宽变为长并应用 map (Python 3.5.1 Pandas)

转载 作者:行者123 更新时间:2023-12-01 04:02:10 25 4
gpt4 key购买 nike

我目前正在 Postgres 中编写一堆表转换语句,我想在 Python 中为其编写一个函数以减少重复代码的数量。假设我有一个表加载到 Pandas 中,如下所示:

import pandas as pd
df = {'state' : ['NJ', 'NJ', 'NY', 'NY'],
'county' : ['AAA', 'BBB', 'CCC', 'DDD'],
'population' : [100, 200, 300, 400],
'other' : [11, 12, 13, 14],
'row_number': [1, 2, 3, 4]
}


county other population row_number state
0 AAA 11 100 1 NJ
1 BBB 12 200 2 NJ
2 CCC 13 300 3 NY
3 DDD 14 400 4 NY

我想保留州和县列。 otherpopulation 字段表示实际数据字段。最后,我想将这些值映射到 Excel 电子表格的列和行中。字段row_number表示对应于州和县的行号。

现在假设我有一个字典,它具有两个数据字段到列之间的“映射”。假设它看起来像

column_mapping = {'other': 'A',
'population': 'B'
}

我想生成一个如下所示的数据框:

   county   state         value         row 
0 AAA NJ 11 A1
1 AAA NJ 100 B1
2 BBB NJ 12 A2
3 BBB NJ 200 B2
4 CCC NY 13 A3
5 CCC NY 300 B3
6 DDD NY 14 A4
7 DDD NY 400 B4

其次,我尝试以最通用的方式执行此操作,因为我想将几个具有相似结构但可能不同的列名称的不同表传递到此函数中(statecountyrow_number 将始终相同,但实际数据字段可能不同)。

最佳答案

您可以使用melt进行 reshape ,然后 map变量,通过 astype 将整数列转换为字符串来组合列最后drop不必要的列:

column_mapping = {'other': 'A',
'population': 'B'
}

df = pd.melt(df, id_vars=['county','state', 'row_number'],
value_vars=['other', 'population'])

df['variable'] = df['variable'].map(column_mapping)
df['row'] = df['variable'] + df['row_number'].astype(str)

df = df.drop(['variable','row_number'], axis=1)

#if you need sort by county column with reset index
df = df.sort_values('county').reset_index(drop=True)
print df
county state value row
0 AAA NJ 11 A1
1 AAA NJ 100 B1
2 BBB NJ 12 A2
3 BBB NJ 200 B2
4 CCC NY 13 A3
5 CCC NY 300 B3
6 DDD NY 14 A4
7 DDD NY 400 B4

编辑:

如果您需要使用melt更一般地说,省略 value_vars:

df = pd.melt(df, id_vars=['county','state', 'row_number']) 
df['variable'] = df['variable'].map(column_mapping)
df['row'] = df['variable'] + df['row_number'].astype(str)
df = df.drop(['variable','row_number'], axis=1)
df = df.sort_values('county').reset_index(drop=True)
print df
county state value row
0 AAA NJ 11 A1
1 AAA NJ 100 B1
2 BBB NJ 12 A2
3 BBB NJ 200 B2
4 CCC NY 13 A3
5 CCC NY 300 B3
6 DDD NY 14 A4
7 DDD NY 400 B4

关于python - 将数据框从宽变为长并应用 map (Python 3.5.1 Pandas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36300462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com