簡體   English   中英

如何在不改變列的情況下將數據框中所有行的值連接成一行?

[英]How to concatenate values of all rows in a dataframe into a single row without altering the columns?

我有一個數據框輸入,看起來像:

  col1 col2 col3 0 3 1 NaN 1 NaN 7 8 

如何在使用', '連接行中的數據時折疊所有行?

所需的數據幀輸出:

  col1 col2 col3 0 3 1, 7 8 

示例輸入代碼:

import pandas as pd
import numpy as np


d = {'col1': ["3", np.nan], 'col2': ["1", "7"], 'col3': [np.nan, "8"]}
df = pd.DataFrame(data=d)

dropna agg + dropna + str.join

df.agg(lambda x: ', '.join(x.dropna())).to_frame().T

  col1  col2 col3
0    3  1, 7    8

還有其他解決方案,我的同行會為你找到它們:)

pd.DataFrame(
    [[
        ', '.join(map(str, map(int, filter(pd.notna, c))))
        for c in zip(*df.values)
    ]], columns=df.columns
)

  col1  col2 col3
0    3  1, 7    8

獲得所需內容的一種方法是創建一個與舊數據幀具有相同列的新數據框,並使用所需數據填充第一個索引。 在您的情況下,您所需的數據將是每列的列表,由', ' ,並刪除您的NaN值:

new_df = pd.DataFrame(columns=df.columns)

for col in df.columns:
    new_df.loc[0, col] = ', '.join(df[col].dropna().tolist())

>>> new_df
  col1  col2 col3
0    3  1, 7    8

隨着堆棧

df.stack().groupby(level=1).apply(','.join).to_frame().T
Out[163]: 
  col1 col2 col3
0    3  1,7    8

還有一個選擇:

In [156]: pd.DataFrame([[df[c].dropna().astype(int).astype(str).str.cat(sep=', ') 
                         for c in df]], 
                       columns=df.columns)
Out[156]:
  col1  col2 col3
0    3  1, 7    8

暫無
暫無

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

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