我有一个数据框输入,如下所示:
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)
答案 0 :(得分:6)
dropna
+ str.join
+ df.agg(lambda x: ', '.join(x.dropna())).to_frame().T
col1 col2 col3
0 3 1, 7 8
。
FileInputStream serviceAccount = new
FileInputStream("path/to/serviceAccountKey.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://qrmoney-1aec0.firebaseio.com")
.build();
FirebaseApp.initializeApp(options);
还有其他解决方案,我的同行会为您找到它们:)
答案 1 :(得分:5)
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
答案 2 :(得分:4)
获得所需内容的一种方法是创建一个与旧数据帧具有相同列的新数据框,并使用所需数据填充第一个索引。在您的情况下,您所需的数据将是每列的列表,由', '
加入,并删除您的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
答案 3 :(得分:4)
使用堆栈
df.stack().groupby(level=1).apply(','.join).to_frame().T
Out[163]:
col1 col2 col3
0 3 1,7 8
答案 4 :(得分:3)
还有一个选择:
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