Python 根据条件,使用来自另一个数据帧的列的值填充列

Python 根据条件,使用来自另一个数据帧的列的值填充列,python,pandas,numpy,Python,Pandas,Numpy,我有一个这样的数据框(我关于新冠病毒病例的输入数据库) 数据: 值得注意的是,上述数据中的“日期”列是一个数字(不是datetime) 我想让它成为这样的时间序列(期望的输出),日期作为索引,每个州的新冠病例作为列 NY CA TX FL 20200625 300 250 200 100 20200626 290 240 100 80 ... 到目前为止,我只使用以下代码创建了输出的scheleton stat

我有一个这样的数据框(我关于新冠病毒病例的输入数据库)

数据:

值得注意的是,上述数据中的“日期”列是一个数字(不是datetime)

我想让它成为这样的时间序列(期望的输出),日期作为索引,每个州的新冠病例作为列

          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