数据帧,多个单元格值

时间:2018-06-05 13:57:19

标签: pandas dataframe

我需要pandas数据框的帮助。 我的数据框有以下列:

Surname, project, project_type, city, value

列“project”和“city”中的单元格具有多个值,以“/”分隔。此类单元格中的最大值数可能是可变的。 对于每一行(在单元格内都有多个值),我需要将它分解为单独的行,在项目和城市列中只有一个值。 其他列中的其余值保持不变。

"Surname"; "project";   "Project_type"; "City";  "value"
  • 史密斯; PR_A / PR_B;升;经度/ NY / LA;万
  • 约翰逊; PR_A; S;巴黎/多伦多; 8000
  • 阳光; PR_C / PR_A / PR_B;升;经度/ NY / LA /多伦多; 17,000
  • 阿奇博尔德; PR_D; S; LA; 6000 .....

有人有任何想法吗? 如果数值不变,不会让我麻烦,但恐怕这是一个挑战。

1 个答案:

答案 0 :(得分:0)

我认为需要product,但首先按/分割值:

from  itertools import product
a=pd.DataFrame([j for i in df.apply(lambda x: x.str.split('/')).values for j in product(*i)],
                  columns=df.columns)
print (a)
      Surname project Project_type     City   value
0       Smith    PR_A            L      Lon  10,000
1       Smith    PR_A            L       NY  10,000
2       Smith    PR_A            L       LA  10,000
3       Smith    PR_B            L      Lon  10,000
4       Smith    PR_B            L       NY  10,000
5       Smith    PR_B            L       LA  10,000
6     Johnson    PR_A            S    Paris   8,000
7     Johnson    PR_A            S  Toronto   8,000
8    Sunshine    PR_C            L      Lon  17,000
9    Sunshine    PR_C            L       NY  17,000
10   Sunshine    PR_C            L       LA  17,000
11   Sunshine    PR_C            L  Toronto  17,000
12   Sunshine    PR_A            L      Lon  17,000
13   Sunshine    PR_A            L       NY  17,000
14   Sunshine    PR_A            L       LA  17,000
15   Sunshine    PR_A            L  Toronto  17,000
16   Sunshine    PR_B            L      Lon  17,000
17   Sunshine    PR_B            L       NY  17,000
18   Sunshine    PR_B            L       LA  17,000
19   Sunshine    PR_B            L  Toronto  17,000
20  Archibald    PR_D            S       LA   6,000