簡體   English   中英

根據相同 DataFrame 中更改單元格值連接多個單元格

[英]Concatenating multiple cells based on changing cell value in same DataFrame

我有一個大的 dataframe 並且我試圖弄清楚如何將具有不同值的單元格連接到一個單元格中,給定以下 dataframe:
DF1:以數據和名稱作為標題

    Data,                          Name
    Address 213,                   Name1
    Household = 1,                 Name1
    1012 ..alpha numeric value..., Name1
    1013 ..alpha numeric value..., Name1
    1012 ..alpha num val2...       Name1
    1013 ..alpha num val2...       Name1
    Address 234,                   Name2
    Household = 2,                 Name2
    1012 ..alpha numeric value..., Name2
    1013 ..alpha numeric value..., Name2
    1012 ..alpha num val2...       Name2
    1013 ..alpha num val2...       Name2
    .......... dataframe repeats with different values for 10,000+ lines

1012 和 1013 是重復序列 X 次。 我想要得到的 output 是:
DF輸出:

    Data                                                                                      Name
    Address 213   Household = 1   1012 ..alpha numeric value.. 1013 ..alpha numeric value..., Name1
    Address 213   Household = 1   1012 ..alpha num val2...     1013 ..alpha num val2...,      Name1
    Address 234   Household = 2   1012 ..alpha numeric value.. 1013 ..alpha numeric value..., Name2
    Address 234   Household = 2   1012 ..alpha num val2...     1013 ..alpha num val2...,      Name2
    ..... repeats for entire dataframe 10,000+ lines in DF1

或者,DFOut 中Data列中的單元格也可以分開:

    Data,         Number,         Seq,                          Seq1,                          Name
    Address 213,  Household = 1,  1012 ..alpha numeric value.., 1013 ..alpha numeric value..., Name1
    Address 213,  Household = 1,  1012 ..alpha num val2...,     1013 ..alpha num val2...,      Name1
    Address 234,  Household = 2,  1012 ..alpha numeric value.., 1013 ..alpha numeric value..., Name2
    Address 234,  Household = 2,  1012 ..alpha num val2...,     1013 ..alpha num val2...,      Name2
    ..... repeats for entire dataframe 10,000+ lines in DF1

我嘗試使用一些for循環來根據值搜索Data列,然后將不同的值連接到一列中,但是這樣做之后由於某種原因我失去了Name列。 我對 Python 相當陌生,任何幫助將不勝感激。 提前致謝!

嘗試這個:

dfgrp0 = df.groupby("Name")["Data"].apply(list).reset_index()

dfgrp1 = dfgrp[['Data', 'Number', 'Seq1', 'Seq2']] = pd.DataFrame(dfgrp['Data'].to_list())

Output:

dfgrp0

Name        Data
0   Name1   [Address 213, Household = 1, 1012 ..alpha nume...
1   Name2   [Address 234, Household = 2, 1012 ..alpha nume...

dfgrp1

    Name    Data        Number          Seq1                       Seq2
0   Name1   Address 213 Household = 1   1012 ..alpha numeric value  1013 ..alpha numeric value
1   Name2   Address 234 Household = 2   1012 ..alpha numeric value  1013 ..alpha numeric value

我不確定你的用例是什么——這可能需要一些調整,因為它對你的數據做出了一些假設——但如果你想要真正花哨的話:

df['k'] = df['Data'].str.split(' ').map(lambda _: _[0])
df['v'] = df['Data'].str.split(' ').map(lambda _: ' '.join(_[1:]).strip('='))

df.drop('Data', axis=1, inplace=True)
df_out = pd.pivot_table(df, index=["Name"], columns=["k"], values=["v"], aggfunc=np.sum)
df_out

Output:

    v
k       1012                    1013                    Address Household
Name                
Name1   ..alpha numeric value   ..alpha numeric value   213     1
Name2   ..alpha numeric value   ..alpha numeric value   234     2

您可以通過迭代和使用字符串連接來獲得所需的 output。 只需確保Data列是字符串類型。

DF1["Data"] = DF1["Data"].astype('str') # Convert "Data" column to string type
DF1_grouped = DF1.groupby("Name") # Create groups
DFOut = DF1_grouped["Data"].sum() # Concatenate strings

單線解決方案

DFOut = DF1.groupby("Name")["Data"].sum()

如果您希望每個Data值后有空格,則可以在字符串轉換后和分組前將其添加到列中。

DF1["Data"] = DF1["Data"] + " " # Add space after each string

暫無
暫無

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

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