Python 这些for循环可以重构吗?

Python 这些for循环可以重构吗?,python,pandas,Python,Pandas,我想知道是否有一个更干净,更有效的方法来做到这一点。我目前使用两个for循环来执行以下操作: data = {'orig_state': ['TN','TN','TN','TX','TX','IL'], 'orig_state_fn': ['Tennessee','Tennessee','Tennessee','Texas','Texas','Illinois'], 'dest_state': ['CA','TN','TN','TX','IL','CA']

我想知道是否有一个更干净,更有效的方法来做到这一点。我目前使用两个for循环来执行以下操作:

data = {'orig_state': ['TN','TN','TN','TX','TX','IL'],
        'orig_state_fn': ['Tennessee','Tennessee','Tennessee','Texas','Texas','Illinois'],
        'dest_state': ['CA','TN','TN','TX','IL','CA']
       }
df = pd.DataFrame(data,columns=['orig_state','orig_state_fn','dest_state'])

state_options = []
for state in df['orig_state'].unique():
    state_options.append({'label': str(df[df['orig_state'] == state]['orig_state_fn'].unique())+" "+str(df[df['orig_state'] == state]['dest_state'].count())                      
                      +" Packages",'value':state})    
for i in range(len(state_options)):
    state_options[i]['label'] = state_options[i]['label'].replace("['", "").replace("']", "")  
输出:

state_options>>

[{'label': 'Tennessee 3 Packages', 'value': 'TN'},
 {'label': 'Texas 2 Packages', 'value': 'TX'},
 {'label': 'Illinois 1 Packages', 'value': 'IL'}]

我们可以做
groupby

df1=df.groupby('orig_state').\
        apply(lambda x : x['orig_state_fn'].unique()[0]+' '+str(len(x))+' packages').reset_index()
df1.columns=['value','label']

l=df1.to_dict('r')

你不需要把它带进熊猫,计算并带回字典。您可以在字典中执行所有计算:

#create a pairing of the three values in the dictionary
m = zip(*data.values())

#create a dictionary from the pairing
from collections import defaultdict
d = defaultdict(list)
for k,v,s in m:
    d[v].append(k)

print(d)

defaultdict(list,
            {'Tennessee': ['TN', 'TN', 'TN'],
             'Texas': ['TX', 'TX'],
             'Illinois': ['IL']})

#now create the output in the form you desire
outcome = [{"label":f"{key} {len(value)} Packages",
            "value" : value[0]}
           for key, value in d.items()]

outcome

[{'label': 'Tennessee 3 Packages', 'value': 'TN'},
 {'label': 'Texas 2 Packages', 'value': 'TX'},
 {'label': 'Illinois 1 Packages', 'value': 'IL'}]

对不起,我忘了提到我的开始是一个空列表=state\u options=[]。然后我附加到该列表以创建您看到的输出。我编辑了我原来的帖子,让它更清晰。很抱歉让人困惑,但我实际上是从一个数据框开始的。我只是从字典中创建数据帧,为大家提供一个小示例,说明我的数据帧是什么样子。如果是这样,请将其导出到字典中并在那里运行计算