[英]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.