我需要创建一个新列indicator
,该列的值为code
。我不能使用if else语句,因为code
可以在second code
列的其他位置具有一个值和相同的值。任何帮助将不胜感激。
import pandas as pd
df = pd.DataFrame({
'date': ['2019-04-19','2019-04-20','2019-05-03', '2019-05-04',
'2019-10-01','2019-10-07','2019-10-11', '2019-11-20'],
'category': ['ID F', 'ID F', 'ID F', 'ID F',
'ID B', 'ID B', 'ID B', 'ID B'],
'code': ['None', 'None', 'None', '8008',
'None', 'None', '9001', 'None'],
'second_code': ['None', 'None', '8008', 'None',
'None', 'None', 'None', 'None']})
df['date'] = pd.to_datetime(df['date'], infer_datetime_format=True)
date category code second_code
0 2019-04-19 ID F None None
1 2019-04-20 ID F None None
2 2019-05-03 ID F None 8008
3 2019-05-04 ID F 8008 None
4 2019-10-01 ID B None None
5 2019-10-07 ID B None None
6 2019-10-11 ID B 9001 None
7 2019-11-20 ID B None None
所需的数据框
date category code second_code indicator
0 2019-04-19 ID F None None None
1 2019-04-20 ID F None None None
2 2019-05-03 ID F None 8008 8008
3 2019-05-04 ID F 8008 None None
4 2019-10-01 ID B None None None
5 2019-10-07 ID B None None None
6 2019-10-11 ID B 9001 None 9001
7 2019-11-20 ID B None None None
编辑:
我尝试过:
df['indicator'] = np.where(df['new_code'].notnull(), df['new_code'], np.where(df['code']).notnull(), df['code'], np.nan)
但收到错误 AttributeError: 'tuple' object has no attribute 'notna'
答案 0 :(得分:1)
最简单的方法应该是将fillna
函数与drop_duplicates
一起使用,以确保我们第一次在列中显示特定代码。
# First we need to replace the "None" with actual NaN values
df = df.replace("None", np.nan)
df["indicator"] = df["second_code"].fillna(df["code"]).drop_duplicates()
df
date category code second_code indicator
0 2019-04-19 ID F NaN NaN NaN
1 2019-04-20 ID F NaN NaN NaN
2 2019-05-03 ID F NaN 8008 8008
3 2019-05-04 ID F 8008 NaN NaN
4 2019-10-01 ID B NaN NaN NaN
5 2019-10-07 ID B NaN NaN NaN
6 2019-10-11 ID B 9001 NaN 9001
7 2019-11-20 ID B NaN NaN NaN
基本上,我是在告诉熊猫:以“ second_code”列为例,并用“ code”中的值填写“ second_code”中所有缺少的值(NaN)。然后,消除上述操作中可能存在的重复条目,并将此结果分配给“指标”列。
答案 1 :(得分:0)
尝试这个。
import pandas as pd
df = pd.DataFrame({
'date': ['2019-04-19','2019-04-20','2019-05-03', '2019-05-04',
'2019-10-01','2019-10-07','2019-10-11', '2019-11-20'],
'category': ['ID F', 'ID F', 'ID F', 'ID F',
'ID B', 'ID B', 'ID B', 'ID B'],
'code': ['None', 'None', 'None', '8008',
'None', 'None', '9001', 'None'],
'second_code': ['None', 'None', '8008', 'None',
'None', 'None', 'None', 'None']})
df['date'] = pd.to_datetime(df['date'], infer_datetime_format=True)
df['indicator'] = df['code']
print(df)
输出。
date category code second_code indicator
0 2019-04-19 ID F None None None
1 2019-04-20 ID F None None None
2 2019-05-03 ID F None 8008 None
3 2019-05-04 ID F 8008 None 8008
4 2019-10-01 ID B None None None
5 2019-10-07 ID B None None None
6 2019-10-11 ID B 9001 None 9001
7 2019-11-20 ID B None None None
在sizeHint()
处了解更多信息,该文档包含了所有内容。