Python 根据条件,使用来自另一个数据帧的列的值填充列
我有一个这样的数据框(我关于新冠病毒病例的输入数据库) 数据: 值得注意的是,上述数据中的“日期”列是一个数字(不是datetime) 我想让它成为这样的时间序列(期望的输出),日期作为索引,每个州的新冠病例作为列Python 根据条件,使用来自另一个数据帧的列的值填充列,python,pandas,numpy,Python,Pandas,Numpy,我有一个这样的数据框(我关于新冠病毒病例的输入数据库) 数据: 值得注意的是,上述数据中的“日期”列是一个数字(不是datetime) 我想让它成为这样的时间序列(期望的输出),日期作为索引,每个州的新冠病例作为列 NY CA TX FL 20200625 300 250 200 100 20200626 290 240 100 80 ... 到目前为止,我只使用以下代码创建了输出的scheleton stat
NY CA TX FL
20200625 300 250 200 100
20200626 290 240 100 80
...
到目前为止,我只使用以下代码创建了输出的scheleton
states = ['NY', 'CA', 'TX', 'FL']
days = [20200625, 20200626]
columns = states
positives = pd.DataFrame(columns = columns)
i = 0
for day in days:
positives.loc[i, "date"] = day
i = i +1
positives.set_index('date', inplace=True)
positives= positives.rename_axis(None)
print(positives)
返回:
NY CA TX FL
20200625.0 NaN NaN NaN NaN
20200626.0 NaN NaN NaN NaN
在以下情况下,如何从“数据”数据框中获取“案例”列的值:
(i) 数据中的值[“state”]=列标题中的“positives”
(ii)数据中的值[“日期”]=行索引的“正数”您可以执行以下操作:
df = df.set_index(['date', 'state']).unstack().reset_index()
# fix column names
df.columns = df.columns.get_level_values(1)
state CA FL NY TX
0 20200624 240.0 NaN 290.0 NaN
1 20200625 250.0 100.0 300.0 200.0
稍后,要再次设置索引,我们需要显式设置名称,请执行以下操作:
df = df.set_index("")
df.index.name = "date"
您感兴趣的转换称为枢轴。您可以通过以下方式实现这一点:
# Reproduce part of the data
data = pd.DataFrame({'date': [20200625, 20200625, 20200624, 20200624],
'state': ['NY', 'CA', 'NY', 'CA'],
'cases': [300, 250, 290, 240]})
data
# date state cases
# 0 20200625 NY 300
# 1 20200625 CA 250
# 2 20200624 NY 290
# 3 20200624 CA 240
# Pivot
data.pivot(index='date', columns='state', values='cases')
# state CA NY
# date
# 20200624 240 290
# 20200625 250 300
使用,
df.pivot('date','state','cases')
awesome!!它工作得很好。唯一剩下的问题是,我在列标题上方得到了一些标签:(在图像中:date,positive[positive是现在填充df的值的列的名称..并在索引上方声明!)关于如何清理它的任何建议?谢谢…我现在如何使带有日期的列成为新索引?我会使用df.set\u index('date',inplace=True)
但该列不再有标题我现在不知道我是否做错了什么…但这就是我得到的…我希望有一个标题行,带有州名(NY…),开头没有“州”,与“日期”在同一行。很抱歉问了这么多问题,我非常感谢您的帮助。请尝试设置df.columns.name=None
# Reproduce part of the data
data = pd.DataFrame({'date': [20200625, 20200625, 20200624, 20200624],
'state': ['NY', 'CA', 'NY', 'CA'],
'cases': [300, 250, 290, 240]})
data
# date state cases
# 0 20200625 NY 300
# 1 20200625 CA 250
# 2 20200624 NY 290
# 3 20200624 CA 240
# Pivot
data.pivot(index='date', columns='state', values='cases')
# state CA NY
# date
# 20200624 240 290
# 20200625 250 300