簡體   English   中英

將pandas數據框轉換為包含字典或列表列表

[英]converting pandas dataframe to contain a dictionary or list of lists

      state      Year  Month  count
0       alabama  2017.0   10.0     31
1       alabama  2017.0   11.0     30
2       alabama  2017.0   12.0     31
3       alabama  2018.0    1.0     31
4       alabama  2018.0    2.0     28
5       alabama  2018.0    3.0     31
6       alabama  2018.0    4.0     30
7       alabama  2018.0    5.0     31
8       alabama  2018.0    6.0     30
9       alabama  2018.0    7.0     14
10     arkansas  2017.0   10.0     31
11     arkansas  2017.0   11.0     30
12     arkansas  2017.0   12.0     31

我可以將上面的數據框轉換為:

                                                            Month
state                                                        
alabama         {2017:10.0, 2017:11.0, 2017:12.0, 2018:1.0, 2018:2.0, 2018:3.0, 2018:4.0, 2018:5.0, 2018:6.0, 2018:7.0}
arkansas        {2017:10.0, 2017:11.0, 2017:12.0}

轉換pandas數據框以包含列表有關

根據下面的@Vaishali的評論,由於字典不能包含重復的鍵,因此也可以這樣做:

                                                            Month
state                                                        
alabama         [[2017,10.0], [2017,11.0], [2017,12.0], [2018,1.0], [2018,2.0], [2018,3.0], [2018,4.0], [2018,5.0], [2018,6.0], 2[018,7.0]]
arkansas        [[2017,10.0], [2017,11.0], [2017,12.0]]

嘗試

df.groupby('state').apply(lambda x: list(zip(x['Year'], x['Month'])))


state
alabama     [(2017.0, 10.0), (2017.0, 11.0), (2017.0, 12.0...
arkansas     [(2017.0, 10.0), (2017.0, 11.0), (2017.0, 12.0)]
In [73]: (df.groupby('state')['Year','Month']
            .apply(lambda x: x.values.tolist())
            .to_frame('Month')
            .reset_index())
Out[73]:
      state                                              Month
0   alabama  [[2017.0, 10.0], [2017.0, 11.0], [2017.0, 12.0...
1  arkansas   [[2017.0, 10.0], [2017.0, 11.0], [2017.0, 12.0]]

我想這會起作用。

d={}
for index, row in df.iterrows():
  if(d.get(row['state'],0)==0):
    d[row['state']=[].append(str(row['year'])+" : "+ str(row['month']))
  else:
    d[row['state']] = d[row['state']].append(str(row['year'])+" : "+ str(row['month']))

它會像

arkansas        ["2017 : 10.0", "2017 : 11.0", "2017 : 12.0"]

或者也

df.groupby('state').apply(lambda x:x[['Year','Month']].values)

state
alabama     [[2017.0, 10.0], [2017.0, 11.0], [2017.0, 12.0...
arkansas     [[2017.0, 10.0], [2017.0, 11.0], [2017.0, 12.0]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM