我可以帮您进行翻译。以下是您需要翻译的内容:
创建一个名为“msg”的新列。
如果“A”不是空字符串,则将“msg”列设置为“红色”。
我对在Pandas数据框中新列添加文本标签感兴趣。以下示例可以工作,但我收到了复制警告,我不完全明白在这种情况下是否应忽略它。
数据框只包含字符或为空字符串:
In [1]: import pandas as pd
In [2]: df=pd.DataFrame({('A'):['x','','x',''], ('B'):['x','x','','']})
In [3]: df
Out[3]:
A B
0 x x
1 x
2 x
3
创建一个名为“msg”的新列。
In [4]: df['msg'] = ''
In [5]: df
Out[5]:
A B msg
0 x x
1 x
2 x
3
如果“A”不是空字符串,则将“msg”列设置为“红色”。
In [6]: df['msg'][df['A'] != ''] = 'red;'
In [7]: df
Out[7]:
A B msg
0 x x red;
1 x
2 x red;
3
根据'B'列的值连接字符串'blue'
In [8]: df['msg'][df['B'] != ''] += 'blue;'
In [9]: df
Out[9]:
A B msg
0 x x red;blue;
1 x blue;
2 x red;
3
另外,我发现使用 numpy.where 可以得到所需的结果。在 Pandas 中应该如何正确地实现这个操作?
import numpy as np
df['msg'] += np.where(df['A'] != '','green;', '')
更新:2018年4月15日
经过进一步思考,在某些情况下保留原始DataFrame的数据但仍附加标签(例如此示例中的“颜色”)将非常有用。 @COLDSPEED的答案引导我进行以下更改(在此情况下将“blue;”更改为“blue:”,并保留列“B”数据以包括在标记中):
df['msg'] = (v.where(df.applymap(len) > 0, '') +
df.where(df[['B']].applymap(len)>0,'')).agg(''.join, axis=1)
A B msg
0 x x red;blue:x
1 x blue:x
2 x red;
3
df
中的所有值都相同吗?还是可能不同? - cs95