Nil*_*age 10 python concatenation dataframe pandas
我正在尝试DataFrame用NaN值连接Pandas 列.
In [96]:df = pd.DataFrame({'col1' : ["1","1","2","2","3","3"],
'col2' : ["p1","p2","p1",np.nan,"p2",np.nan], 'col3' : ["A","B","C","D","E","F"]})
In [97]: df
Out[97]:
col1 col2 col3
0 1 p1 A
1 1 p2 B
2 2 p1 C
3 2 NaN D
4 3 p2 E
5 3 NaN F
In [98]: df['concatenated'] = df['col2'] +','+ df['col3']
In [99]: df
Out[99]:
col1 col2 col3 concatenated
0 1 p1 A p1,A
1 1 p2 B p2,B
2 2 p1 C p1,C
3 2 NaN D NaN
4 3 p2 E p2,E
5 3 NaN F NaN
Run Code Online (Sandbox Code Playgroud)
而不是"连接"列中的"NaN"值,我想分别为这个例子得到"D"和"F"?
Kiw*_*iwi 16
我不认为你的问题是微不足道的.但是,这是一个使用numpy矢量化的解决方法:
In [49]: def concat(*args):
...: strs = [str(arg) for arg in args if not pd.isnull(arg)]
...: return ','.join(strs) if strs else np.nan
...: np_concat = np.vectorize(concat)
...:
In [50]: np_concat(df['col2'], df['col3'])
Out[50]:
array(['p1,A', 'p2,B', 'p1,C', 'D', 'p2,E', 'F'],
dtype='|S64')
In [51]: df['concatenated'] = np_concat(df['col2'], df['col3'])
In [52]: df
Out[52]:
col1 col2 col3 concatenated
0 1 p1 A p1,A
1 1 p2 B p2,B
2 2 p1 C p1,C
3 2 NaN D D
4 3 p2 E p2,E
5 3 NaN F F
[6 rows x 4 columns]
Run Code Online (Sandbox Code Playgroud)
sl1*_*129 10
对于整个数据框或所需的列,您可以先用空字符串替换NaN.
In [6]: df = df.fillna('')
In [7]: df['concatenated'] = df['col2'] +','+ df['col3']
In [8]: df
Out[8]:
col1 col2 col3 concatenated
0 1 p1 A p1,A
1 1 p2 B p2,B
2 2 p1 C p1,C
3 2 D ,D
4 3 p2 E p2,E
5 3 F ,F
Run Code Online (Sandbox Code Playgroud)
我们可以使用stackwhich 来删除NaN,然后使用groupby.agg和','.join字符串:
df['concatenated'] = df[['col2', 'col3']].stack().groupby(level=0).agg(','.join)
Run Code Online (Sandbox Code Playgroud)
col1 col2 col3 concatenated
0 1 p1 A p1,A
1 1 p2 B p2,B
2 2 p1 C p1,C
3 2 NaN D D
4 3 p2 E p2,E
5 3 NaN F F
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14026 次 |
| 最近记录: |